*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。