*Redis OBJECT 命令

OBJECT 是 Redis 对象检查命令的入口,提供多个子命令用于查看 key 的内部编码、空闲时间、引用计数等底层信息。


*语法

OBJECT subcommand [arg ...]

*参数说明

参数 类型 必填 说明
subcommand String 子命令:ENCODING / FREQ / IDLETIME / REFCOUNT
arg 取决于子命令 子命令所需的参数(通常是 key)

*返回值

  • 返回值取决于子命令:
    • OBJECT ENCODING:编码名称字符串(如 rawintziplist 等)
    • OBJECT FREQ:访问频率计数(LFU)
    • OBJECT IDLETIME:空闲时间(秒)
    • OBJECT REFCOUNT:引用计数(整数)
  • 键不存在时返回 Nil

*时间复杂度

O(1)

*

*示例

*查看编码

> SET mykey "hello"
OK
> OBJECT ENCODING mykey
"raw"
> SET numkey 42
OK
> OBJECT ENCODING numkey
"int"

*查看空闲时间

> OBJECT IDLETIME mykey
(integer) 120

*查看引用计数

> OBJECT REFCOUNT mykey
(integer) 1

*查看 LFU 频率

> OBJECT FREQ mykey
(integer) 5

*常见错误

错误 原因 解决
ERR unknown subcommand 子命令名称错误 使用 ENC/ENCODING/FREQ/IDLETIME/REFCOUNT
ERR wrong number of arguments 缺少 key 参数 提供要检查的 key
WRONGTYPE 不适用于该 key 类型(极少见) 确认 key 存在

*最佳实践

  • 使用 OBJECT ENCODING 分析数据结构选型是否合理(如小 Hash 应为 ziplist/listpack)
  • OBJECT IDLETIME 结合 maxmemory-policy 分析键的访问模式
  • OBJECT FREQ 需要配置 maxmemory-policy 为 LFU 相关策略才有效
  • 调试内存问题时检查编码是否异常(如小字符串不应为 raw)
  • 生产环境不建议高频调用,涉及内部状态读取

*FAQ

Q1: OBJECT ENCODING 返回的编码有哪些? A: 常见有 rawintembstr(String)、ziplist/listpack(List/Hash/ZSet)、hashtableskiplistquicklist 等,因版本和配置而异。

Q2: OBJECT IDLETIME 和 LRU 策略有什么关系? A: IDLETIME 返回自上次访问以来的秒数,正是 LRU 驱逐策略的决策依据之一。

Q3: REFCOUNT 大于 1 是什么意思? A: 表示该对象被多个引用共享(如复制共享),Redis 内部优化机制。

Q4: OBJECT FREQ 返回 0 正常吗? A: 如果未启用 LFU 策略或对象从未被访问,可能返回 0。

Q5: 键不存在时返回什么? A: 返回 nil (nil)