首页/数据/数据库速查/热 key 排查(--hotkeys / MONITOR / 代理统计)
Redis 运维与场景124 条

热 key 排查(--hotkeys / MONITOR / 代理统计)

热 key 是流量焦点:redis-cli --hotkeys(需 LFU 策略)给访问频次榜;MONITOR 采样真机命令流;代理/客户端埋点统计真实分布。

数据库速查数据更新于 2026-10-13

热 key 是什么

热 key 指单位时间内访问次数远超其他键的键,常见于榜单、秒杀库存、全局配置这类被全站集中读写的对象。它的问题不在数据量大小,而在流量集中在单个分片:Redis 处理命令是单线程的,某个键的 QPS 再高也只由一个节点一个线程扛,请求排队后延迟直接上扬,扩容分片对单个热点键没有帮助。

基本信息

适用平台Redis 4.0+;--hotkeys 要求淘汰策略为 LFU 系列
主要手段redis-cli --hotkeys、MONITOR 限时采样、代理或客户端埋点
判断口径单键 QPS 占比过高,如 10 万 QPS 里有 3 万打同一个键
前提读热点与写热点处置方式完全不同,先分清再动手

典型使用场景

  • 大促前评审榜单、库存、配置类键的访问集中度,提前做读分摊
  • 实例延迟抖动但 CPU、内存都不高:优先怀疑单键排队而非资源不足
  • 集群扩容的容量评审:确认瓶颈是热点还是总量,避免扩容无效
  • 客户端超时集中上报时,核对是否集中在同一个键或同一类键
  • 某个节点网卡被打满而其他节点空闲,需要定位流量来源

排查手段

排查手段
# 前提:淘汰策略切到 LFU,--hotkeys 才可用
CONFIG SET maxmemory-policy allkeys-lfu
redis-cli --hotkeys          # 按 LFU 计数输出访问频次榜
# 限时命令流采样,避免输出洪流
# timeout 5 redis-cli MONITOR | awk '{print $4}' | sort | uniq -c | sort -rn | head
redis-cli --bigkeys          # 顺带确认是否存在大 key 放大单键成本
redis-cli INFO stats | grep -E 'instantaneous_ops_per_sec|total_commands_processed'

三种手段对比

手段适用代价
--hotkeys扫描全键按 LFU 计数排序需 LFU 策略;大实例扫描耗时
MONITOR 采样看到真实命令流,可核对调用方高 QPS 下输出洪流,拖慢实例
代理或客户端埋点长期统计单键 QPS 与来源需改代码或依赖代理能力
热点通常来自业务设计本身(榜单、秒杀库存、全局配置键):排查手段只负责定位,真正解决要在业务侧做读分摊(多副本、本地缓存)或写合并。
MONITOR 会把命令及其参数(可能含手机号、令牌等敏感值)打印到终端:生产只允许短时限时采样,输出不要落盘、不要贴进工单。

易错点

  • 在非 LFU 策略的实例上跑 --hotkeys:命令直接报错或被判为无效,先把 maxmemory-policy 切到 allkeys-lfu 或 volatile-lfu 再执行
  • 生产长时间开 MONITOR 排查:输出洪流把实例 CPU 与网络吃满,观测行为本身变成故障,务必加 timeout 并选低峰
  • 只看整体 QPS 平均值:均值会掩盖单键集中度,要看键级分布或代理侧的键维度统计
  • 把读热点方案套用到写热点:写热点要合并写或按业务分桶,加读副本只会增加同步开销

数据来源与参考

  • Redis 官方文档: redis-cli --hotkeys
  • Redis 官方文档: MONITOR

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌