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常见编码速查
| 类型 | 小数据编码 | 大数据编码 |
|---|---|---|
| string | int / embstr | raw |
| list | listpack | quicklist |
| hash | listpack | hashtable |
| set | intset / listpack | hashtable |
| zset | listpack(7.2+ 小集合) | skiplist |
编码转换由元素数量与元素大小触发,阈值参数形如 hash-max-listpack-entries、set-max-intset-entries 等。转换一般是单向的:一旦转成通用编码,即使把数据删到很小也不会自动退回紧凑编码。
OBJECT IDLETIME 与 OBJECT FREQ 互斥:选择 LFU 淘汰策略后 IDLETIME 报错,选择 LRU 或 noeviction 时 FREQ 报错,排查前先确认 maxmemory-policy。