Redis 上线检查清单
本页把开发和运维中最容易遗漏的条件整理成上线前检查项。它不重复讲解机制;每个需要深入判断的项目都链接到对应章节。
检查开发用法
避免阻塞主线程
- 生产查询不使用
KEYS,键空间扫描改用SCAN及其迭代版本。 - 删除大值前先测量大小,优先评估
UNLINK的后台回收行为。 - 不一次性读取超大 Hash、List 或 ZSet,按字段或范围分批访问。
- 客户端使用有上限的连接池,并配置连接超时、读取超时和重试上限。
完整的慢命令判断见性能优化,大值处理见大 Key 与热 Key,连接与重试边界见客户端连接与故障处理。
选择合适的数据模型
- 只更新部分字段时,评估 Hash 是否比整体序列化的 String 更合适。
- 缓存 Key 明确 TTL、更新路径和淘汰责任,不把缓存当成唯一数据副本。
- 集合运算、排行榜和位图只在数据规模与命令复杂度可接受时使用。
- 为业务 Key 定义统一命名、所有权和生命周期,不使用无前缀的临时 Key。
数据类型语义见五种基础数据类型,缓存失效策略见缓存失效场景。
检查并发和恢复
- 锁具有过期时间、唯一持有者标识和失败重试边界。
- 任务消费具备确认、重试、幂等和死信处理,不只依赖
BLPOP。 - 关键写入明确故障时允许丢失的数据量,并据此选择持久化和副本策略。
- 应用能够处理
LOADING、READONLY、连接拒绝和超时,不进行无上限重试。
检查运行配置
内存与淘汰
maxmemory已扣除操作系统、监控、网络缓冲和 fork/COW 所需空间。- 淘汰策略与数据用途一致:可重建缓存可以淘汰,主数据通常使用
noeviction并扩容。 - 淘汰次数、内存使用率和碎片率均有告警。
- 达到
maxmemory时,应用有明确的降级或拒绝写入行为。
持久化与故障转移
- RDB、AOF 或两者的组合与 RPO 一致,不把“开启持久化”当作数据不丢失的保证。
- 已完成一次备份恢复和一次从节点数据加载演练。
latest_fork_usec、AOF 重写、磁盘延迟和复制偏移差已纳入监控。- Sentinel 或 Cluster 的故障转移已在非生产环境演练,客户端能够刷新拓扑。
- 主从默认异步复制的丢失窗口已写入运维文档,并有对应的业务接受结论。
持久化取舍见持久化 RDB 与 AOF,备份和恢复流程见备份、恢复与升级,拓扑选择见首次生产部署。
网络与权限
- Redis 只监听回环或私网地址,端口不对公网和不可信容器开放。
- 防火墙或安全组只允许应用与运维网段访问。
- 每个应用使用独立 ACL 用户,命令和 Key 模式符合最小权限。
- 密钥通过环境变量或密钥管理系统注入,日志和仓库中没有凭据。
- 跨不可信网络时启用 TLS,并验证证书、主机名和轮换流程。
rename-command如有使用,只作为减少误操作的补充措施。
网络、ACL、TLS 和凭据轮换见安全与访问控制,部署入口见首次生产部署。
检查可观测性
- 延迟使用分位数和慢日志观察,不仅看平均值。
- 监控 QPS、网络带宽、连接数、命中率、复制延迟和持久化状态。
- 每个告警都有负责人、阈值依据、处理步骤和升级条件。
- 能按实例、Key 前缀或客户端定位流量突增,不只保留聚合曲线。
- 已建立正常负载基线,容量评估来自真实数据而不是示例值。
指标定义和告警设计见监控告警。
检查集群约束
- 跨槽多 Key 操作已经消除,或通过哈希标签将相关 Key 放入同一槽。
- Key 分布不会长期集中到单个主节点,迁移前后都检查槽分布。
- 大 Key 在扩缩容前已拆分,迁移窗口经过压测。
- 客户端正确处理
MOVED、ASK和拓扑刷新,不在异常后无限重定向。
集群机制见集群模式。
记录上线结论
| 类别 | 通过条件 | 结果 |
|---|---|---|
| 容量 | 数据增长、内存、磁盘和带宽均有余量 | □ |
| 性能 | 峰值负载下延迟和错误率达到业务目标 | □ |
| 数据 | RPO、RTO、备份和恢复演练已有记录 | □ |
| 高可用 | 故障转移和客户端拓扑刷新经过验证 | □ |
| 安全 | 网络、ACL、TLS 和密钥注入检查完成 | □ |
| 告警 | 核心指标有阈值、负责人和处理步骤 | □ |
| 回滚 | 配置变更、版本升级和流量回退方案明确 | □ |
| 降级 | Redis 不可用时应用行为符合预期 | □ |
任何一项无法确认时,应记录风险、责任人和截止时间;不要用“默认配置可用”代替验证结果。