Hot Key(Redis 集群中的热点 Key)
在 Redis 集群环境中,当某些缓存 Key 被频繁访问且集中分布在同一个槽位(slot)上时,
会造成该节点负载过高,而其他节点相对空闲,导致整个集群性能不均衡,这就是所谓的 Hot Key 问题。
Hot Key 监控方法
你提到可以使用 redis-cli –hotkeys 命令,它通过采样 SCAN 的方式识别热点 Key,不会阻塞 Redis,可用于监控热点 Key。
常见处理方案
Key 分片(Key Sharding / Splitting)
对热点 Key 进行拆分,例如将 counter 拆为 counter:1, counter:2, counter:3 等多个 Key,分布于不同槽位,
并在客户端汇总结果以形成全局值。这样可以分散访问负载。
(客户端首先要知道他写入的key是热点key)
读写分离(读扩展)
将热点 Key 的读请求导向多个 Redis replica 实例,缓解主节点(master)的读压力。
Replica 通常通过异步复制保持数据更新,但可能有延迟。
客户端缓存
在客户端层临时缓存热点 Key 的值(如内存中),
减少对 Redis 集群的访问频次。不过要处理好缓存失效与同步机制。
限流或读速率控制
对热点 Key 的访问速度进行限制(如每秒最大请求数),避免短时间内瞬间并发请求压垮 Redis 节点。
客户端判断 Hot Key 的常见方法
- 客户端统计并上报热点 Key
在业务代码层面,嵌入统计逻辑:每次访问 Redis 前,由客户端(如在 Jedis/Lettuce SDK 中)统计 key 的访问次数,
并定期上报至监控系统。监控系统可基于设定阈值,识别出 Hot Key。 - 代理层(Proxy)统一收集 Key 访问
如果 Redis 请求经过统一代理(如 Twemproxy、Codis 等),
可以在代理层统计所有访问请求并进行上报和分析。这样可以统一集中识别热点 Key。 - 采样 SCAN
用 SCAN 游标分批抽样一些 key → 对抽到的每个 key 查询 OBJECT FREQ(LFU 频率计数)→ 维护一个小型 Top-N 列表 → 输出频率最高的那些 key。