首页/数据/Redis 进阶速查/OBJECT FREQ 读取频率计数
内存与管理99 条

OBJECT FREQ 读取频率计数

OBJECT FREQ 返回键的 LFU 访问计数(对数刻度)与空闲时间的内部编码;需 LFU 策略下才有意义。

Redis 进阶速查数据更新于 2026-10-13

OBJECT FREQ 是什么

OBJECT FREQ 是 Redis 4.0 起的对象自省命令,返回键在 LFU 策略下累计的访问频率计数。这个计数是 8 位对数刻度(0-255),不是真实访问次数:每次访问按 1/(count*lfu-log-factor+1) 的概率递增,访问越多增长越慢,所以用一个字节就能区分冷键和热点键。它只在 maxmemory-policy 为 LFU 系(allkeys-lfu、volatile-lfu)时才有意义,LRU 系策略下执行会直接报错。

基本信息

命令OBJECT FREQ key
版本Redis 4.0 及以上
前提maxmemory-policy 为 allkeys-lfu 或 volatile-lfu
返回0-255 的对数频率计数
相关调节lfu-log-factor(默认 10)、lfu-decay-time(默认 1 分钟)
开销O(1),但要对大量键调用时仍需控制频率

典型使用场景

  • 验证热点判断:业务认定的热点键,看计数是否真的排在前列
  • 校验 LFU 参数:调整 lfu-log-factor 或 lfu-decay-time 后确认计数曲线符合预期
  • 排查命中率下降:缓存命中率掉了,抽查计数是否普遍偏低,说明淘汰误伤有用键
  • 容量优化排序:结合 MEMORY USAGE 找出又大又热的键优先拆分
  • 自动化巡检:脚本按前缀抽样,把计数写进监控做趋势

最小示例

最小示例
redis-cli CONFIG GET maxmemory-policy     # 先确认是 LFU 策略,否则命令会报错
redis-cli OBJECT FREQ user:1001           # 读当前对数频率计数(0-255)
redis-cli GET user:1001                   # 访问一次,计数按概率递增
redis-cli OBJECT FREQ user:1001           # 复查计数,通常只增 0 或 1
redis-cli OBJECT IDLETIME user:1001       # LFU 下这条会报错,可用来反证策略已生效

返回与解读

情形返回值怎么解读
LFU 下被频繁访问的键计数通常在数十以上确认是热点,重点优化其体积与访问方式
LFU 下的冷键0 或个位数可考虑加 TTL 让淘汰更早回收
LRU 策略下返回错误:需要 LFU 策略先切策略再看,切换后计数需要时间累积
键不存在返回空(nil)核对键名与所选数据库
计数只在同一实例、同一 lfu-log-factor 下可比。换实例或改过参数后,数值刻度已经变了,跨环境比大小没有意义。
运行时从 LRU 切到 LFU,旧键的计数是随机初值,需要跑一段时间再采样,否则结论不可用。

易错点

  • 把计数当真实访问次数:它是对数刻度的概率计数,只能比较数量级,不能换算成点击量
  • 在 LRU 策略下执行会直接报错,解读前先 CONFIG GET maxmemory-policy
  • 刚切换策略就立刻采样:旧键计数为随机初值,结果不可用
  • 批量对海量键调用 OBJECT 系列命令,会增加 CPU 与网络开销,用抽样代替全量遍历

数据来源与参考

  • Redis 官方文档:OBJECT FREQ 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌