跳到正文

Redis 生产检查清单 ​

适用 Redis 7.x;Vector Sets 相关条目需 Redis 8.0+。每条都可勾选,括号内是默认值或判断依据;版本差异以官方文档为准。 这份清单只列「不做会出事」的动作,机制解释见各篇正文。

上线前 ​

  • [ ] 内存上限与淘汰策略:显式设置 maxmemory 且不超过物理内存 50%(默认 0 即不限制,以官方文档为准);纯缓存用 allkeys-lru,混合存储用 volatile-lru 且所有缓存 key 必须带 TTL(默认 noeviction,写满直接报错)。
  • [ ] 持久化可恢复:appendonly yes、appendfsync everysec、aof-use-rdb-preamble yes(5.0+);自动 RDB 用 save "" 关闭,改低峰手动 BGSAVE;做过一次 AOF/RDB 真实恢复。
  • [ ] 危险命令与大 key 门禁:rename-command KEYS "",生产不用 MONITOR,遍历用 SCAN;String >10KB 或集合 >5000 元素视为大 key,写入前拦截,删除用 UNLINK(4.0+)。
  • [ ] 缓存防护到位:TTL 加 0–300 秒随机偏移;穿透用布隆过滤器(误判率 0.01%–0.1%)或空值 TTL 5–10 分钟;热点 key 用 1–5 秒本地缓存或 2–4 个副本打散。
  • [ ] 高可用拓扑:Sentinel 至少 3 个、quorum=N/2+1(quorum 只判定 ODOWN,执行切换的 Leader 另需全部 Sentinel 的多数票)、down-after-milliseconds=15000–30000;或 Cluster 至少 3 主 3 从,客户端支持 MOVED/ASK。
  • [ ] 分布式锁语义正确:SET key uuid NX EX 30,解锁用 Lua 比对 value 后删除;不指定 leaseTime 才启用 WatchDog(默认 30000ms);强一致场景不把锁押在单节点 Redis 上。
  • [ ] AI 向量内存先算清:按 维度×4B 再加 HNSW 图 1.5–2 倍估算(1536 维 float32 约 6KB/条,1000 万条是百 GB 级);语义缓存 key 带模型与索引版本。

运行中 ​

  • [ ] 内存与慢命令:INFO memory 看 used_memory/maxmemory、mem_fragmentation_ratio>1.5、evicted_keys 增长;INFO stats 算 keyspace_hits/misses;SLOWLOG GET 10 与 latest_fork_usec 一起看。
  • [ ] 复制链路:INFO replication 看 lag、master_repl_offset 与 slave_repl_offset 差值;repl-backlog-size=1MB 按「写入速率×最长断线×2」调大。
  • [ ] Cluster 健康:CLUSTER INFO 为 cluster_state:ok 且 16384 个 slot 全覆盖;单分片 CPU/内存长期高于其他分片 2 倍视为倾斜。

故障时 ​

  • [ ] 内存翻倍后被 OOM Killer 杀 → INFO memory + latest_fork_usec → BGSAVE/全量同步的 COW 峰值 → 关闭自动 RDB、把 maxmemory 降到物理内存 50% 以下。
  • [ ] 全站超时但 CPU 不高 → SLOWLOG GET → 有 KEYS/HGETALL/DEL 大 key 等 O(N) 命令 → 改 SCAN/UNLINK,并排查大 key 删除。
  • [ ] 单个分片 CPU 100% → redis-cli --hotkeys(需 LFU)或客户端埋点 → 热 key 集中 → 本地缓存、副本打散或拆分 key。
  • [ ] 缓存大面积失效、DB 连接池被打满 → keyspace_hits/misses + evicted_keys → TTL 同时到期或热点被淘汰 → 随机 TTL + 逻辑过期,先限流保 DB。
  • [ ] 主从切换后丢最近写入 → INFO replication 的 offset 差 + 业务核对 → 异步复制固有窗口 → 关键写用 WAIT(3.0+),或确认业务可接受缓存语义。

把一门技术讲透到既懂也会用