*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-STARTHOTKEYS-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 中,键分布在不同节点,因此各节点的热点键列表可能不同。