Appearance
Redis 大 Key 和热 Key 怎么排查:现象、风险和处理思路
Redis 出问题时,很多人第一反应是“是不是机器不够了”。但真实场景里,更常见的是:
- 单个 key 太大,传输和删除都很重
- 单个 key 太热,所有流量集中打到一个分片
这两个问题经常一起出现,但处理思路并不一样。
先说结论
- 大 Key:单个 Key 对应的 value 体积过大
- 热 Key:单个 Key 被访问得过于频繁
- 大 Key 先看数据模型和删除方式,热 Key 先看热点流量和回源保护
- 不要只会扩 Redis,很多问题本质上是建模和访问模式出了问题
一、大 Key 有什么风险
它常见的风险是:
- 网络传输变慢
- 删除或迁移成本高
- 主从复制压力变大
- 内存抖动更明显
- RDB / AOF 期间放大阻塞和 IO 压力
常见场景:
- 一个超大的
hash - 一个塞了大量成员的
set - 一个很大的 JSON 字符串
- 把整页结果、整份配置、整批明细直接塞进一个 key
二、热 Key 有什么风险
热 Key 的问题不在“它大不大”,而在“访问集中度太高”,导致单个分片被打成热点。
典型表现:
- 某个热点请求延迟上升
- Redis 单实例某一时段 QPS 极高
- CPU 被某几个 Key 明显打满
- 网络出口流量集中到少量节点
- 应用侧开始超时并回源数据库
常见场景:
- 首页热门数据
- 秒杀商品库存
- 单个配置项被高频读取
- 大促活动页的统一配置
- 爆款商品详情、库存或活动状态
三、怎么先判断是哪一类问题
如果是大 Key,更常看到:
- 某类命令单次 RT 变长
- 同一个 key 删除、迁移、复制时抖动明显
- 一次读取返回的数据量很大
如果是热 Key,更常看到:
- 单节点 QPS、CPU、网络远高于其他节点
- 慢日志里不一定有异常,但接口 RT 明显波动
- 回源数据库或下游接口的流量跟着一起上升
四、怎么应对大 Key
更稳妥的方向通常是:
- 拆分存储
- 避免一次返回超大对象
- 设置合理过期与淘汰策略
- 删除时注意分批处理
- 大 key 清理时优先异步或分片删除,避免直接重操作
本质上,大 Key 往往说明建模方式需要重新看。
五、怎么应对热 Key
常见思路:
- 本地缓存分担一部分流量
- 多副本或分片分散热点
- 热点数据预热
- 在业务层做限流
- 控制回源,避免 Redis 抖动时把数据库一起打穿
如果这是秒杀、活动类场景,还要进一步考虑:
- 流量控制
- 读写分离
- 请求削峰
六、排查时最容易忽略的两件事
1. 热 Key 不一定出现在慢日志里
因为单次命令可能很快,真正的问题是“频率太高”。
2. 大 Key 和热 Key 可能同时出现
比如一个热点商品详情 key 既很大又很热,这时候影响会更重:
- 每次请求都要搬大对象
- 还集中压在一个分片上
七、什么时候要优先怀疑它们
如果你看到这些现象,可以优先怀疑:
- Redis 响应时间突然升高
- 某些接口平时正常,活动时明显变慢
- 网络带宽压力异常
- 主从同步延迟变大
- 少数节点明显比其他节点更忙
总结
大 Key 解决的是“单个对象太胖”,热 Key 解决的是“访问热点太集中”。两者本质上都不是命令层的小技巧问题,而是数据模型、访问模型和流量治理的问题。先分清是哪一类,再决定是拆对象、改建模,还是做热点隔离和回源保护。