首页/数据/数据库速查/OBJECT 子命令(编码/引用/空闲/频率)
Redis 命令96 条

OBJECT 子命令(编码/引用/空闲/频率)

OBJECT 查看键的内部信息:ENCODING 看底层结构、REFCOUNT 引用计数、IDLETIME 空闲秒数、FREQ 访问频率(LFU);排查内存与淘汰行为时非常有用。

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

OBJECT 子命令是什么

OBJECT 系列用于查看某个键的内部信息:ENCODING 看底层数据结构、REFCOUNT 看共享对象的引用计数、IDLETIME 看空闲秒数、FREQ 看访问频率。它是内存分析与淘汰行为排查的基础工具:同一个逻辑类型在不同数据规模下可能用完全不同的编码,内存占用能差几倍,而淘汰策略(尤其 LFU)的行为也直接依赖这些计数器。

基本信息

查看编码OBJECT ENCODING key
查看引用OBJECT REFCOUNT key(整数共享对象会显示极大值)
查看空闲OBJECT IDLETIME key(LFU 策略下不可用)
查看频率OBJECT FREQ key(仅 LFU 淘汰策略下有效)
帮助OBJECT HELP 列出可用子命令

典型使用场景

  • 内存分析:先看编码判断结构是否退化,再用 MEMORY USAGE 看真实占用
  • 淘汰策略验证:LFU 下确认 FREQ 是否在增长,判断键是否真被访问
  • 空闲键清理依据:找出长期无人访问的大键,为下线或迁移决策提供数据
  • 哈希与集合优化:确认是否已从紧凑编码转为通用哈希表,评估优化空间
  • 升级变更核对:版本升级后同一批键的编码变化,用于验证参数是否按预期生效

常用查询

常用查询
SET n 123
OBJECT ENCODING n        # -> int(能用整数表示时最省)
SET s hello
OBJECT ENCODING s        # -> embstr(短字符串)
RPUSH l a b c
OBJECT ENCODING l        # -> listpack
OBJECT REFCOUNT n        # -> 2147483647(共享整数标记值,不是真实引用数)
OBJECT IDLETIME n        # 空闲秒数;LFU 策略下该命令不可用
OBJECT FREQ n            # 仅 LFU 策略下有效,表示访问频率
MEMORY USAGE n           # 真正的字节占用
OBJECT HELP

常见编码速查

类型小数据编码大数据编码
stringint / embstrraw
listlistpackquicklist
hashlistpackhashtable
setintset / listpackhashtable
zsetlistpack(7.2+ 小集合)skiplist
编码转换由元素数量与元素大小触发,阈值参数形如 hash-max-listpack-entries、set-max-intset-entries 等。转换一般是单向的:一旦转成通用编码,即使把数据删到很小也不会自动退回紧凑编码。
OBJECT IDLETIME 与 OBJECT FREQ 互斥:选择 LFU 淘汰策略后 IDLETIME 报错,选择 LRU 或 noeviction 时 FREQ 报错,排查前先确认 maxmemory-policy。

易错点

  • 把 REFCOUNT 的 2147483647 当成真实引用数:那是共享整数对象的标记值,不代表有二十多亿引用
  • 把 ENCODING 写进业务判断逻辑:编码随版本与参数变化(例如小集合编码在 7.2 发生变化),业务逻辑不应依赖它
  • 在正确策略下用错命令:LFU 下调用 IDLETIME 会直接报错,先确认 maxmemory-policy 再选命令
  • 只看编码不看实际占用:同样编码的两个键体积可能差很多,内存评估要结合 MEMORY USAGE 与元素数量
  • 以为 OBJECT 是只读无害命令就高频调用:它仍占用单线程执行时间,监控脚本不应密集轮询大键

数据来源与参考

  • Redis 官方文档: OBJECT ENCODING
  • Redis 官方文档: OBJECT IDLETIME

相关工具

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