当前位置: 首页 > news >正文

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 条军规不是教条,而是“踩坑—复盘—固化”的循环产物。愿你在下一次故障来临前,已把它们变成肌肉记忆。

http://www.lryc.cn/news/591505.html

相关文章:

  • Baumer工业相机堡盟工业相机如何通过YoloV8模型实现人物识别(C#)
  • MacOS安装linux虚拟机
  • Kubernetes架构原理与集群环境部署
  • Spring Boot 自动配置:从 spring.factories 到 AutoConfiguration.imports 的演变
  • MySQL安全修改表结构、加索引:ON-Line-DDL工具有哪些
  • 数据产品结构:从数据接入到可视化的完整架构指南
  • 学习C++、QT---27(QT中实现记事本项目实现行列显示、优化保存文件的功能的讲解)
  • Spring Boot 参数校验:@Valid 与 @Validated
  • 关于vector中的erase的强调
  • Leetcode刷题营第二十八题:二叉树的前序遍历
  • Effective Python 条款7 用列表推导来取代map和filter
  • c++之 KMP 讲解
  • 网络原理 —— HTTP
  • 深入理解Collections.addAll方法
  • Python 离线安装 PyInstaller 的完整步骤(以python3.11.4-amd64.exe为例)
  • Trae IDE:打造完美Java开发环境的实战指南
  • 产品经理如何绘制服务蓝图(Service Blueprint)
  • 基于5G系统的打孔LDPC编码和均匀量化NMS译码算法matlab性能仿真
  • Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
  • 线程(三) linux 同步
  • .NET Framework版本信息获取(ASP.NET探针),获取系统的.NET Framework版本
  • pycharm提交项目到github及问题解决
  • ubuntu基础搭建
  • 【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
  • 基于单片机公交车报站系统/报站器
  • 分支和循环语句
  • Kotlin集合与空值
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • 学习 Flutter (四):玩安卓项目实战 - 中
  • 【LeetCode 热题 100】230. 二叉搜索树中第 K 小的元素——中序遍历