--hotkeys 是什么
redis-cli --hotkeys 用 LFU 的访问计数找出全库最热的键,每条结果带着计数一起输出,并附上采样键数。它必须运行在 maxmemory-policy 为 LFU 系的实例上,否则命令直接报错。用途是把「哪个键把单核打满」这件事从猜测变成可查的证据,再据此决定本地缓存、分片加盐还是限流。
基本信息
| 命令 | redis-cli --hotkeys |
|---|---|
| 前提 | maxmemory-policy 为 allkeys-lfu 或 volatile-lfu |
| 统计口径 | OBJECT FREQ 的对数频率计数 |
| 遍历方式 | 全库 SCAN,可配合 -i 限速 |
| 输出 | 热点键与对应计数、采样键数 |
| 局限 | 只给少数最热键,不含业务维度聚合 |
典型使用场景
- 热点治理:定位少数高频键后做本地缓存或读写拆分
- 分片方案评估:热点集中在少数键说明按 key 取模分片无效,需要按业务加盐
- 改造效果验证:加本地缓存或加盐后重跑,看计数是否被摊薄
- 容量决策:把热点键的计数与体积一起看,决定是否单独拆分
- 故障排查:命中率骤降时确认是否有个别键被反复击穿
最小示例
最小示例
redis-cli CONFIG GET maxmemory-policy # 必须为 LFU,否则 --hotkeys 直接报错
redis-cli --hotkeys # 扫描并输出热点键与计数
redis-cli --hotkeys -i 0.1 # 限速扫描,降低对线上的影响
redis-cli OBJECT FREQ user:1001 # 复核单个键的计数
redis-cli INFO commandstats # 从命令维度确认哪些操作最频繁结果怎么读
| 观察 | 含义 | 动作 |
|---|---|---|
| 少数键计数远高于其他 | 存在明显热点 | 加本地缓存或按业务键分片 |
| 计数普遍偏低且无尖峰 | 访问较分散 | 不是热点问题,转向慢命令与网络排查 |
| 扫描没有输出 | 策略不是 LFU 或键太少 | 先 CONFIG GET maxmemory-policy 确认 |
| 计数与业务认知不符 | 计数未稳定或键名不同 | 让实例再运行一段时间后重扫 |
计数是对数刻度且会随时间衰减,刚被访问的键计数还没涨起来很正常;热点判断看数量级差异,不要抠具体数值。
它只覆盖 key 维度。线程池睡眠、连接池等待、大命令阻塞造成的问题,要用 INFO commandstats 与慢查询日志一起看。
扫描会遍历全库并逐个读取计数,大实例上要配合 -i 限速并避开业务高峰,优先在从库执行。