首页/数据/数据库速查/OBJECT ENCODING / IDLETIME / FREQ 诊断
Redis 命令96 条

OBJECT ENCODING / IDLETIME / FREQ 诊断

OBJECT 系列子命令看单键内部细节:ENCODING 编码、IDLETIME 空闲秒数(LRU)、FREQ 访问频率(LFU),是大 key 与访问模式分析利器。

数据库速查数据更新于 2026-10-13

OBJECT 系列诊断是什么

OBJECT 命令族查看单个键的内部状态:ENCODING 看内部编码,REFCOUNT 看共享对象引用计数,IDLETIME 看空闲秒数(LRU 策略下维护),FREQ 看访问频次(LFU 策略下维护)。IDLETIME 与 FREQ 只在对应淘汰策略下才有意义,策略不匹配时会报错或恒为零,这是排查时最容易踩的坑;内存占用要用 MEMORY USAGE 而不是 OBJECT。

基本信息

适用版本Redis 全版本(OBJECT FREQ 需 4.0+)
ENCODING内部编码(int/embstr/raw/listpack/quicklist/hashtable/skiplist 等)
IDLETIMELRU 空闲秒数;LFU 策略下恒为 0
FREQLFU 访问频次计数器;LRU 策略下报错
REFCOUNT共享对象引用计数,大于 1 说明用了共享整数对象
内存占用MEMORY USAGE key 才是正确入口

典型使用场景

  • 大 key 分析:确认某个键使用了哪种编码、是否已转为开销更大的结构
  • 热 key 定位:在 LFU 策略下读 FREQ,找出访问最频繁的键
  • 冷数据识别:用 IDLETIME 找长期未被访问的键,评估清理
  • 内存优化:核对短字符串是否仍是 embstr
  • 缓存命中率排查:结合编码与访问统计判断是否被频繁重建

示例

示例
SET k v
OBJECT ENCODING k      # embstr
OBJECT REFCOUNT k      # 共享对象引用计数
OBJECT IDLETIME k      # 空闲秒数(需 maxmemory-policy 为 LRU 系才更新)

# LFU 策略下看访问频次(策略不匹配会报错)
CONFIG SET maxmemory-policy allkeys-lfu
OBJECT FREQ k

# 内存占用与编码是两个维度
MEMORY USAGE k

子命令与前置条件

子命令返回什么前置条件
ENCODING内部编码名称无,任何键都可查
REFCOUNT引用计数无,用于判断是否共享对象
IDLETIME空闲秒数maxmemory-policy 为 LRU 系才维护
FREQLFU 访问频次maxmemory-policy 为 LFU 系,否则报错
MEMORY USAGE键的内存字节数无,替代 OBJECT 的内存视角
分析热 key 时,OBJECT 只能看单个键:需要全局视角可用 redis-cli --hotkeys(LFU 策略下有效)或对 INFO commandstats、慢日志做采样统计,再回到具体键上用 OBJECT 确认。
在 LRU 策略下执行 OBJECT FREQ 会直接报错,在 LFU 策略下读 IDLETIME 又只会得到 0:排查热 key 或冷 key 之前,先确认 maxmemory-policy 是哪种淘汰策略。

易错点

  • 在 LRU 策略下读 OBJECT FREQ:直接报错,先确认淘汰策略再选命令
  • 以为 OBJECT 会给出内存占用:它只管编码与引用计数,内存必须用 MEMORY USAGE
  • 把 IDLETIME 当最后访问时间的精确值:它按精度采样,只能看大致冷热
  • 刚切换到 LFU 就立刻看 FREQ:计数器从零开始累积,需要观察一段时间才有意义
  • 用 FREQ 判断热 key 却不看访问分布:采样精度与实际请求量存在偏差,需结合慢日志与命令统计
  • 在集群里只连一个节点就下结论:键可能落在别的分片上,查到「不存在」并不代表键已消失,需按分片定位或使用集群模式客户端

数据来源与参考

  • Redis 官方文档: OBJECT
  • Redis 官方文档: OBJECT FREQ

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌