Redis 生产实战 7×24:容量规划、性能调优、故障演练与成本治理 40 条军规

(一)写在前面:为什么需要"军规"

Redis 在测试环境跑得飞快,一到线上就"莫名其妙"抖动;大促前扩容 3 倍,成本却翻 5 倍;一次主从切换,缓存雪崩导致下游 DB 被打挂;开发说"Redis 是缓存,丢点数据无所谓",结果用户下单重复扣款。

这些问题背后,是缺乏体系化的方法论。本文以"军规"形式,总结 40 条血泪经验,覆盖容量、性能、高可用、成本、监控、演练、治理七大主题。

(二)容量规划 6 条军规

军规 1:不要用"峰值 QPS × 平均 value 大小"估算内存。

真实公式:

memory = (key 总数 × (key 长度 + value 长度 + 56B 元数据)) × 1.3(碎片因子) + 复制 backlog + client 缓冲区 + AOF 重写缓冲区。

军规 2:提前 6 个月规划 TTL。

业务方往往拍脑袋写 86400s,结果 90% key 3 小时后就无访问。TTL 减半,内存立省一半,但需评估击穿风险。

军规 3:冷热分级。

把 30 天未访问的 key 迁移到 SSD Redis 或 OSS,接口延迟从 1 ms 涨到 5 ms,但内存成本降 70%。

军规 4:预分配集群槽位。

不要等 1000 个节点再扩容,提前按业务域分池,避免跨槽事务。

军规 5:预留 20% 内存给复制与 AOF。

主从全量同步时,子进程瞬时内存翻倍,云主机 OOM Killer 会无情降临。

军规 6:定期跑 redis-cli --bigkeys。

10 KB 的 value 用 hash 拆分,>1 MB 的直接打回业务方。

(三)性能调优 8 条军规

军规 7:slowlog 阈值不要设 10 ms,请设 1 ms。

一次 Lua 脚本 50 ms,会拖慢整个事件循环。

军规 8:避免 keys *、flushdb。

用 SCAN + pipeline,或者把命令改写成 Lua。

军规 9:监控 used_cpu_sys 与 used_cpu_user 比例。

比例 > 3 说明系统调用开销大,检查是否频繁 fork、swap。

军规 10:开启 io-threads 前,先用 redis-benchmark 压测。

单核 QPS 已 > 8 万且 value > 4 KB 时才生效。

军规 11:TLS 不是洪水猛兽。

在 AWS Nitro Enclaves 上,TLS 握手延迟 < 0.2 ms,CPU 消耗 < 5%,安全合规收益远高于性能损耗。

军规 12:关闭 THP。

Transparent Huge Page 会导致 30 ms 级延迟毛刺。

军规 13:NUMA 绑核。

在多 socket 服务器上,把 Redis 绑到同一个 NUMA node,避免跨 node 访存。

军规 14:避免 swap。

vm.overcommit_memory=1,关闭 swap,或把 swapiness 调到 1。

(四)高可用与故障演练 10 条军规

军规 15:哨兵至少 3 节点,且跨机架。

两节点"脑裂"时,业务永远选错主。

军规 16:cluster-require-full-coverage=no。

当 1/16384 槽位异常时,集群仍可服务。

军规 17:每月一次"机房断电"演练。

用 iptables 随机 drop 500 ms 包,模拟网络抖动;用 tc 注入 200 ms 延迟,验证客户端重试策略。

军规 18:故障演练前先跑 redis-check-aof 与 redis-check-rdb。

AOF 尾部写坏时,可用 redis-check-aof --fix 截断到最近合法命令。

军规 19:配置 client-output-buffer-limit replica 256mb 64mb 60。

防止 replica 读取慢导致 master 缓冲区堆积。

军规 20:设置 min-replicas-to-write 1。

极端情况下,拒绝写请求,保护数据。

军规 21:使用 redis-cli --rdb 做异地冷备。

RDB 流式传输,无需停机。

军规 22:Prometheus 采集间隔 5 s,不要 30 s。

故障窗口 30 s 足以让熔断失效。

军规 23:告警分级。

P0:master 宕机;P1:replica 延迟 > 1 s;P2:used_memory > 85%。

军规 24:灰度升级。

先在只读实例升级,跑 24 h 无异常再升级主库。

(五)成本治理 7 条军规

军规 25:开启内存压缩。

listpack + 32 位编码,可省 40% 内存。

军规 26:使用 Spot 实例跑 replica。

Spot 被回收时,自动提升其他 replica。

军规 27:购买云上预留实例,不要按量。

3 年期预留比按量便宜 60%。

军规 28:定期回收僵尸 key。

写脚本扫描 TTL=-1 且 idle > 7 天的 key,发工单给业务 owner。

军规 29:避免跨 AZ 流量费。

同地域多 AZ 部署,用 VPC Endpoint 走内网。

军规 30:把日志压缩后转存 OSS。

AOF 重写后 7 天自动打包 gzip,节省 90% 存储。

军规 31:按业务域拆分集群。

A 业务 20 G、B 业务 200 G,放一起会导致 A 被迫付 10 倍成本。

(六)监控与可观测性 5 条军规

军规 32:用 redis_exporter + Grafana,而不是自己写脚本。

社区已支持 200+ 指标,覆盖 99% 场景。

军规 33:关注 master_last_io_seconds_ago。

replica 延迟不是看 offset,而是看主从最后一次交互时间。

军规 34:记录 executed_commands_total。

突增 10 倍,可能是业务死循环或爬虫。

军规 35:用 keyspace_misses / (hits + misses) 计算命中率。

不要只看 info stats 的 keyspace_hits。

军规 36:开启 latency-monitor-threshold 100。

记录 > 100 μs 的操作栈,方便火焰图定位。

(七)客户端与业务协同 4 条军规

军规 37:禁止 keys、monitor、flushall 命令。

用 ACL 屏蔽,或重命名为随机字符串。

军规 38:连接池大小 = (峰值 QPS × 平均 RTT) / (1 - 连接利用率)。

不要拍脑袋设 200。

军规 39:重试策略必须带 jitter。

固定 1 s 重试会导致 thundering herd。

军规 40:重大活动前 2 周冻结 Redis 配置变更,并做压测。

变更窗口不跨 0 点,方便回滚。

(八)结语

Redis 的门槛不在安装,而在"如何不踩坑"。40 条军规不是教条,而是"踩坑---复盘---固化"的循环产物。愿你在下一次故障来临前,已把它们变成肌肉记忆。

相关推荐
云资源服务商31 分钟前
探索阿里云DMS:解锁高效数据管理新姿势
数据库·阿里云·oracle·云计算
KaiwuDB3 小时前
KWDB时序数据库特性及跨模查询
数据库
向上的车轮3 小时前
SQLite技术架构解析,适用场景有哪些?
数据库·架构·sqlite
亚雷3 小时前
深入浅出 MySQL:彻底搞懂 redo log、undo log 与 binlog
数据库·后端·程序员
马立杰4 小时前
Oracle 19.28 RU 升级最佳实践指南
数据库·oracle
Tapdata4 小时前
TapData 出席 2025 MongoDB 用户大会新加坡站,分享构建实时统一数据平台最佳实践
数据库
老邓计算机毕设4 小时前
Springboot儿童摄影服务91f0v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
望获linux4 小时前
【实时Linux实战系列】实时系统的调试技术
linux·运维·服务器·网络·数据库·操作系统·嵌入式软件
Kevinyu_4 小时前
Redisson
java·redis·缓存
NineData4 小时前
杭州基础软件和工业软件产业联盟成立,玖章算术成为首批联盟成员
数据库