*Redis HOTKEYS-GET 命令

HOTKEYS-GET 用于获取特定键的访问频率统计信息,查询单个键是否为热点键及其访问详情。


*语法

HOTKEYS-GET key

*参数说明

参数 类型 必填 说明
key String 要查询的键名

*返回值

  • Integer:该键的访问频率(统计周期内的访问次数)
  • 0:键存在但访问频率为 0,或键未被统计到
  • Error:HotKeys 模块未加载或参数错误

*时间复杂度

O(1)

*

*示例

*查询单个键的访问频率

> HOTKEYS-GET user:1001:session
(integer) 1250

*查询低频键

> HOTKEYS-GET user:9999:session
(integer) 0

*查询不存在的键

> HOTKEYS-GET nonexistent:key
(integer) 0

*常见错误

错误 原因 解决
ERR wrong number of arguments 未传入键名 提供要查询的键名
ERR unknown command 'hotkeys-get' HotKeys 模块未加载 在 redis.conf 中加载 hotkeys.so 模块
ERR HotKeys not started 热点键监控未启动 先执行 HOTKEYS-START

*最佳实践

  • 场景:排查特定键是否为热点键,确认缓存穿透或缓存击穿问题
  • 配合 HOTKEYS 命令使用,先列出热点键再逐个查询详情
  • 在缓存优化前使用该命令验证键的访问频率,避免盲目优化
  • 可用于监控关键业务键(如秒杀商品库存键)的实时访问压力
  • 建议在应用层记录高频键的访问日志,与 HOTKEYS-GET 结果交叉验证

*FAQ

Q1: HOTKEYS-GET 返回 0 是什么意思? A: 可能表示该键未被访问、键不存在、或监控未启动。需结合 HOTKEYS-START 状态判断。

Q2: 可以查询多个键吗? A: 不支持一次查询多个键,需逐个调用 HOTKEYS-GET,或使用 HOTKEYS 批量获取热点键列表。

Q3: 访问频率会随时间衰减吗? A: 取决于模块配置,部分实现支持滑动窗口统计,旧数据会随时间衰减。

Q4: 返回 0 是否意味着该键一定不是热点键? A: 不一定。如果监控未启动或键在统计期间未被访问,也会返回 0。建议结合 HOTKEYS 命令和 HOTKEYS-START 状态综合判断。

Q5: 为什么查询频率高的键返回 0,但 KEY 命令显示键存在? A: 键存在不代表它在监控期间被访问。HotKeys 统计的是访问频率,而非键是否存在。如果监控未启动或启动时间太短,高频键也可能显示为 0。