*Redis OBJECT FREQ 命令
OBJECT FREQ 返回指定 key 在 LFU(Least Frequently Used)淘汰策略下的访问频率计数。
*语法
OBJECT FREQ key
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名 |
*返回值
- Integer:LFU 访问频率计数(0 ~ 255 之间)
- Nil:key 不存在
*时间复杂度
O(1)
*
*示例
*查看 key 的 LFU 频率
> SET mykey "value"
OK
> OBJECT FREQ mykey
(integer) 5
> GET mykey
"value"
> OBJECT FREQ mykey
(integer) 6
*多次访问后频率提升
> SET hotkey "hot"
OK
> GET hotkey
"hot"
> GET hotkey
"hot"
> GET hotkey
"hot"
> OBJECT FREQ hotkey
(integer) 15
*key 不存在的场景
> OBJECT FREQ notexist
(nil)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 未提供 key 参数 | 补充 key 参数 |
| 返回 (nil) | key 不存在 | 确认 key 是否存在 |
*最佳实践
- 仅在
maxmemory-policy配置为allkeys-lfu或volatile-lfu时,OBJECT FREQ 才有实际意义 - LFU 频率用于识别热点 key,可辅助缓存预热分析
- 生产环境建议结合 OBJECT IDLETIME 和 OBJECT FREQ 综合判断 key 的价值
- 频率值是 8 位对数计数器,非精确访问次数,但足够用于淘汰决策
*FAQ
Q1: OBJECT FREQ 返回的值是什么意思? A: 返回 0 ~ 255 的整数,表示 key 在 LFU 策略下的访问频率。值越高,说明该 key 被访问越频繁,越不容易被淘汰。
Q2: 为什么配置为 LRU 策略时 OBJECT FREQ 也有返回值? A: 即使当前使用 LRU 策略,Redis 内部对象也存储 LFU 字段(Redis 4.0+ 统一对象结构),但数值无实际淘汰意义。切换策略时,该字段会立即生效。
Q3: LFU 频率会衰减吗?
A: 会。Redis LFU 实现会随时间衰减访问频率,避免旧热点 key 长期占用内存。衰减速度可通过 lfu-decay-time 配置调整。