当前位置: 首页 > 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.dtcms.com/a/284554.html

相关文章:

  • Apollo10.0学习——control模块(2)之纵向控制器参数说明
  • Redisson布隆过滤器原理以及解决Redis缓存穿透方案
  • 单片机(STM32-时钟系统)
  • js是实现记住密码自动填充功能
  • PyCharm 高效入门指南:从安装到进阶,解锁 Python 开发全流程
  • EXCEL VBA合并当前工作簿的所有工作表sheet
  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • C语言---动态内存管理
  • 李宏毅《生成式人工智能导论》 | 第15讲-第18讲:生成的策略-影像有关的生成式AI
  • Google(谷歌)搜索引擎蜘蛛IP地址段
  • ubuntu--curl
  • 《Java Web 核心:Servlet、会话与过滤器笔记》
  • AndroidStudio环境搭建
  • vue svg实现一个环形进度条组件
  • 石子入水波纹效果:顶点扰动着色器实现
  • 【44】MFC入门到精通——MFC 通过Button按钮添加控件变量实现:按下 按钮变色 (比如开关 打开关闭状态) MFC更改button控颜色
  • Git简介与特点:从Linux到分布式版本控制的革命
  • 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
  • Linux Swap区深度解析:为何禁用?何时需要?
  • 【Java EE初阶 --- 网络原理】网络编程
  • Vue3 + WebSocket
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
  • 3.2 函数参数与返回值
  • .vscode 扩展配置
  • 浅析网络安全面临的主要威胁类型及对应防护措施
  • 【C++指南】C++ list容器完全解读(四):反向迭代器的巧妙实现
  • 如何做好DNA-SIP?
  • 【41】MFC入门到精通——MFC中 GetLBText()、GetWindowText()、SetWindowText区别
  • 扭蛋机小程序开发:开启线上娱乐新风尚
  • 分布式光伏发电系统中的“四可”指的是什么?