*Redis HOTKEYS 命令
HOTKEYS 用于启动或查询 HotKeys 热点键分析模块,统计高频访问的键名及其访问频率。
*语法
HOTKEYS [MAX count] [MIN frequency]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| MAX | Integer | 否 | 返回的热点键最大数量,默认 10 |
| MIN | Integer | 否 | 最小访问频率阈值,低于此值的键不显示 |
*返回值
- Array:包含热点键及其访问频率的数组,格式为
[key, frequency] - Error:HotKeys 模块未加载或配置错误时返回
*时间复杂度
O(N),其中 N 为热点键数量。
*示例
*基本查询热点键
> HOTKEYS
1) "user:1001:session"
2) "1000"
3) "product:8888:inventory"
4) "800"
5) "config:api_rate_limit"
6) "600"
*限制返回数量
> HOTKEYS MAX 3
1) "user:1001:session"
2) "1000"
3) "product:8888:inventory"
4) "800"
5) "config:api_rate_limit"
6) "600"
*设置最小频率阈值
> HOTKEYS MIN 500
1) "user:1001:session"
2) "1000"
3) "product:8888:inventory"
4) "800"
5) "config:api_rate_limit"
5) "600"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR unknown command 'hotkeys' | HotKeys 模块未加载 | 在 redis.conf 中加载 hotkeys.so 模块 |
| ERR invalid MAX value | MAX 参数非正整数 | 传入大于 0 的整数 |
| ERR HotKeys not started | 热点键监控未启动 | 先执行 HOTKEYS-START |
*最佳实践
- 场景:大促前识别高频访问键,针对性优化缓存策略
- 结合
HOTKEYS-START和HOTKEYS-STOP控制监控周期,避免长期运行影响性能 - 发现热点键后,考虑使用本地缓存(如 Caffeine)或 Redis Cluster 分散负载
- 大 value 热点键建议拆分或使用压缩
- 定期导出热点键列表用于容量规划和缓存预热
*FAQ
Q1: HOTKEYS 和 Redis 内置的 SLOWLOG 有什么区别? A: SLOWLOG 记录慢查询命令,而 HOTKEYS 统计高频访问的键,两者互补使用。
Q2: 热点键统计会影响 Redis 性能吗?
A: 有一定开销,建议在业务低峰期启动监控,且通过 HOTKEYS-STOP 及时停止。
Q3: 返回的频率单位是什么? A: 频率为统计周期内的访问次数,具体取决于模块配置(通常按秒或分钟统计)。
Q4: 为什么某些键明明访问频繁却未出现在热点键列表中? A: 可能的原因包括:键的访问频率低于 MIN 阈值;采样率设置过低导致遗漏;监控周期太短,样本不足。建议调整参数或延长监控时间后重新查询。
Q5: HOTKEYS 统计结果在不同 Redis 节点上为何不一致? A: HotKeys 模块按节点独立统计,每个节点只记录本节点的键访问情况。在 Redis Cluster 中,键分布在不同节点,因此各节点的热点键列表可能不同。