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.pswp.cn/pingmian/89214.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DOCKER】综合项目 MonitorHub (监控中心)

文章目录1、项目架构图1.1 架构组件2、实际实施2.1 安装docker2.2 编写dockerfile文件2.2.1 Prometheus2.2.2 node_exporter2.2.3 nginxvts模块2.2.4 nginx_exporeter 服务发现文件2.2.5 maridb dockerfile文件2.2.6 镜像总数2.3 具体操作2.3.1 Prometheus组件2.3.2 nginx组件2…

Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌

作为一名 Java 开发工程师&#xff0c;你一定在项目中频繁使用过 List 集合。它是 Java 集合框架中最常用、最灵活的数据结构之一。无论是从数据库查询出的数据&#xff0c;还是前端传递的参数列表&#xff0c;List 都是处理这些数据的首选结构。本文将带你全面掌握&#xff1a…

SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言!

SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言算法近几年刚提出&#xff0c;知网还没几个人用&#xff0c;你先用&#xff0c;你就是创新&#xff01;算法新颖小众&#xff0c;用的人很少&#xff0c;包含分解图、频谱图、相关系数图&#xff0c;效果如…

Oracle数据泵详解——让数据迁移像“点外卖”一样简单​

​今天我想和大家聊一个数据库领域的“万能搬运工”——Oracle数据泵&#xff08;Data Pump&#xff09;​。相信很多人都有过这样的经历&#xff1a;业务要上线新系统&#xff0c;得把旧库的数据搬到新环境&#xff1b;或者领导突然要一份3年前的历史数据&#xff0c;可不能影…

Leetcode 03 java

爬楼梯算法现在只看明白动态规划&#xff0c;也没有很难哟&#xff01;&#xff01;题目70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f;java题解class Solution {public int climbStairs(…

怎么删除 wps 的右键菜单

打开 WPS 点击 WPS Office 选项卡&#xff0c;点击右侧全局配置》配置和修复工具点击高级功能定制下的都可以关闭和隐藏点击确定就可以了。

C++:list

一&#xff0c;list的介绍1&#xff0c;list初步&#xff08;1&#xff09;list是 C 标准模板库 (STL) 中的一个双向链表容器。它允许在常数时间内进行任意位置的插入和删除操作&#xff0c;但不支持随机访问。&#xff08;2&#xff09;list容器的底层数据结构为带头双向循环链…

深入理解Collections.addAll方法

文章目录深入理解Collections.addAll方法概述方法定义基本用法1. 向List添加元素2. 向Set添加元素3. 添加数组元素与传统add方法的比较使用传统add方法使用Collections.addAll性能考虑注意事项实际应用场景与Collection.addAll的区别最佳实践总结深入理解Collections.addAll方法…

CISP-PTE 练习题(完整一套)

目录 1、SQL注入 2、文件上传 3、文件包含 4、代码审计 5、命令执行 6、端口扫描 7、sql 写 webshell 8、3389 远程桌面利用 1、SQL注入 sqllabs-less-24 二次注入 2、文件上传 没有对文件后缀进行检测&#xff0c;但是对文件类型有检测&#xff0c;需要使用图片头绕…

Vue3入门-计算属性+监听器

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;vscode\node.js &#x1f680;所属专栏&#xff1a;Vue3 文章目录1. 计算属性1.1 computed函数1.2 计算属性VS普通函数1.3 计算属性的完整写法2. 监听器3.总结1. 计算属性 计算属性&#xff08;compu…

Linux Swap区深度解析:为何禁用?何时需要?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、Swap区&#xff1a;Linux的"内存救生圈"二、为什么要禁用Swap&#xff1f;性能的隐形杀手三、何时应该使用Swap&#xff1f;不可或缺的场景四、如…

用TensorFlow进行逻辑回归(三)

逻辑回归Logistic regression这个脚本展示如何用TensorFlow求解逻辑回归。 ()ysigmoid(Axb)我们使用低出生重量数据,特别地:y 0 or 1 low birth weightx demographic and medical history dataimport matplotlib.pyplot as pltimport numpy as npimport tensorflow as tfimp…

mingw 编译 assimp v6.0.2 解决编译报错

mingw 编译 assimp v6.0.2 理论上看这个就能满足&#xff1a;在Windows下使用CMakeMinGW64编译Assimp库 环境变量问题 i386 architecture of input file CMakeFiles\assimp.dir/objects.a(assimp.rc.obj)’ is incompatible with i386:x86-64 output collect2.exe: error: ld r…

Windows 11清理C盘方法大全:磁盘清理/禁用休眠/系统还原点/优化大师使用教程

Windows 11清理C盘方法1. 使用磁盘清理工具步骤&#xff1a;按 Win S 搜索“磁盘清理”&#xff0c;打开工具。选择C盘&#xff0c;点击“确定”。勾选需要清理的文件类型&#xff08;如临时文件、系统错误内存转储等&#xff09;&#xff0c;点击“确定”。确认删除操作&…

Rabbitmq Direct Exchange(直连交换机)多个消费者,配置相同的key ,队列,可以保证只有一个消费者消费吗

思考可以保证消费不被重复消费&#xff0c;因为通过轮询一个消息只会投递给一个消费者。但是不是一个消费者消费&#xff0c;而是多个轮询消费在 RabbitMQ 中&#xff0c;如果多个消费者&#xff08;Consumers&#xff09;同时订阅 同一个队列&#xff08;Queue&#xff09;&am…

设计模式是什么呢?

1.掌握设计模式的层次第一层&#xff1a;刚刚学编程不久&#xff0c;听说过什么是设计模式。第二层&#xff1a;有很长时间的编程经验&#xff0c;自己写过很多代码&#xff0c;其中用到了设计模式&#xff0c;但是自己不知道。第三层&#xff1a;学习过设计模式&#xff0c;发…

ThreadLocal使用详解-从源码层面分析

从demo入手看效果 代码Demostatic ThreadLocal tl1 new ThreadLocal();static ThreadLocal tl2 new ThreadLocal();static ThreadLocal tl3 new ThreadLocal();public static void main(String[] args) {tl1.set("123");tl2.set("456");tl3.set("4…

CPO:对比偏好优化—突破大型语言模型在机器翻译中的性能边界

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" CPO&#xff1a;对比偏好优化—突破大型语言模型在机器翻译中的性能边界 摘要 中等规模的大型语言模型&#xff08;LLMs&#xff09;&#xff0c;如参数量为 7B 或 13B 的模型&#xff0c;在机器翻译&#xff0…

执行shell 脚本 如何将日志全部输出到文件

在执行 Shell 脚本时&#xff0c;如果需要将 所有输出&#xff08;包括标准输出 stdout 和错误输出 stderr&#xff09; 重定向到日志文件&#xff0c;可以使用以下方法&#xff1a;方法 1&#xff1a;直接重定向&#xff08;推荐&#xff09; /appdata/mysql_backup_dump.sh &…

Postman接口测试实现UI自动化测试

Selenium底层原理 3天精通Postman接口测试&#xff0c;全套项目实战教程&#xff01;&#xff01;运行代码&#xff0c;启动浏览器后&#xff0c;webdriver会将浏览器绑定到特定的端口&#xff0c;作为webdriver的remote server&#xff08;远程服务端&#xff09;&#xff0c;…