Redis 生产调优实践

Redis 是单线程模型(6.x 起 IO 线程可选),调优思路与其他组件相反:不是加资源,而是控制单个操作的成本——大 Key、慢命令、全量复制是三大杀手。内存管理(淘汰策略、编码优化)与持久化取舍是日常重点。部署安装见《大数据与中间件组件部署总览》。

核心参数与调优理解

参数 默认值 调优理解
maxmemory 0(不限) 内存上限,生产必须设,否则 OOM 被内核杀掉
maxmemory-policy noeviction 淘汰策略:allkeys-lru(缓存通用)、volatile-lru(只淘汰带 TTL 的键)
appendonly no AOF 持久化,生产开启;appendfsync 选 everysec 平衡
appendfsync everysec 每秒刷盘:最常用;always 最安全最慢;no 交给 OS
save 默认 RDB 策略 RDB 快照条件,与 AOF 配合使用
maxclients 10000 最大客户端连接,连接池满报错时查这个
io-threads 4(6.x 起) IO 线程数(仅网络读写),CPU 核多时可设 8;命令执行仍单线程
hash-max-listpack-entries 128 小对象编码阈值:小 hash/list 用紧凑编码,省内存但操作快
timeout 0 空闲连接超时,建议 300 秒防连接堆积
rename-command 禁危险命令:FLUSHALL、FLUSHDB、KEYS 重命名/禁用

大 Key 是 Redis 的头号事故源:单个 string > 10MB 或集合元素 > 万级,会造成阻塞(删除、迁移、复制全卡)。治理手段:拆 Key(按业务维度分片)、UNLINK 异步删除(4.0+)、SCAN 替代 KEYS

三档规格推荐参数

参数 8C16G 32C256G 64C512G
maxmemory 10G 24G 40G
maxmemory-policy allkeys-lru allkeys-lru allkeys-lru
appendonly yes yes yes
appendfsync everysec everysec everysec
io-threads 4 8 8
maxclients 10000 30000 50000
timeout 300 300 300
hash-max-listpack-entries 128 128 128
实例规划 单实例 多实例分片(2~4 个) 多实例分片(4~8 个)

64C512G 的机器不要跑一个 40G 的 Redis:单实例故障影响面=整机、AOF 重写时 IO 阻塞全实例。生产按业务拆多实例(缓存/会话/排行榜各一个实例),或直接上 Redis Cluster,把单实例的爆炸半径缩小。

集群规模优化(几十~上百节点)

  • Redis Cluster 规划:16384 个槽按节点均分;3 主 3 从起步,扩容加主节点自动迁移槽;客户端路由(lettuce/jedis cluster 模式)
  • 哨兵 vs 集群:数据量 < 50G 用”主从 + Sentinel(3 台)”即可;数据量大、需水平扩展用 Cluster
  • 读写分离:Cluster 内从节点可读(readonly),读多场景配读路由;注意从节点读到的数据可能滞后
  • 内存编码利用:小对象走紧凑编码(listpack/intset),大批小 value 场景内存省 50%+;MEMORY USAGE key 验证
  • 过期键清理activedefrag(碎片整理,6.x)+ 过期键惰性/定期删除机制,maxmemory-policy 兜底
  • 连接与慢命令治理SLOWLOG GET 定期查慢命令,大 Key/KEYS/HGETALL 大集合列为红线
  • 故障转移演练:Cluster 自动 failover 与手动 CLUSTER FAILOVER 演练纳入运维计划

容灾与备份

层级 手段 说明
高可用 主从 + Sentinel / Cluster 自动故障转移,秒级切换
数据 RDB/AOF 定期备份 BGSAVE 生成 RDB,或直接用持久化文件快照(停写瞬间拷贝)
异地 跨机房从节点 灾备机房挂从节点(或 Cluster 跨机房),切换读流量
变更 内存/Key 审计 定期扫描大 Key 与内存分布(redis-rdb-tools/MEMORY STATS

Redis 备份的误区:把它当唯一数据源。Redis 是缓存与高速通道,持久化能力是保底不是主用——设计上保证”Redis 全丢,业务能重建”(DB 恢复/消息重放),备份只是降低重建成本。生产惯例:缓存场景容忍 AOF 每秒刷盘;数据可重建的业务,Redis 挂了直接重建,不做”数据库式”的严格备份。

调优常见问题

  • **OOM command not allowed when used memory > 'maxmemory'**:达到 maxmemory 且淘汰策略不匹配(如 noeviction);按业务调策略或扩内存
  • 单线程阻塞、延迟毛刺:大 Key 删除/迁移、KEYS、AOF 重写、RDB fork;用 LATENCY 监控定位,逐个治理
  • 主从复制卡住:全量复制时 repl-backlog-size 太小导致断线重连触发反复全量;调大 backlog(如 128M)
  • 内存碎片率高MEMORY FRAGMENTATION 高于 1.5,开启 activedefrag yes(7.x 默认)或定期重启实例
  • 连接数打满:客户端连接池未回收(maxclients 报错),查 CLIENT LIST 定位业务侧泄漏

调优检查清单

  1. maxmemory + 淘汰策略必设
  2. 大 Key/慢命令红线管控,SLOWLOG 巡检
  3. AOF everysec + RDB 兜底,备份定期演练
  4. 大机器拆多实例或 Cluster,缩小爆炸半径
  5. 连接池与 maxclients 匹配
  6. 主从/Sentinel/Cluster 故障转移演练

Redis 生产调优实践
https://chaggle.github.io/2026/08/09/middleware/redis-tuning-20260810/
作者
chaggle
发布于
2026年8月9日
更新于
2026年8月11日
许可协议