PREDICTED ENCODING
listpack
紧凑收纳
数量和元素大小都没有越线,继续用紧凑布局。
内存布局
连续、紧凑,元数据较少
线性扫描 / 移动压力
较低
转换尾延迟风险
距离阈值尚有余量
实验采用的默认起点
“≤”意味着刚好等于阈值时仍可保持紧凑;任一条件越界都可能触发转换。
| 类型 | 紧凑条件(常用默认) | 越界后的典型编码 |
|---|---|---|
| String | int64 数字 → int;短字符串通常 ≤ 44 B → embstr | raw |
| List | quicklist 的紧凑节点默认目标约 8 KiB | 仍是 quicklist,拆成更多节点 |
| Hash | 字段数 ≤ 512,且每个字段名和值 ≤ 64 B | hashtable |
| Set | 全为 int64 且成员数 ≤ 512 → intset;非纯整数另见 7.2+ 的 128 / 64 | hashtable |
| ZSet | 成员数 ≤ 128,且每个 member ≤ 64 B | skiplist + hashtable |
预测之后,去实例里验货
配置可能被运维改过,不同小版本也会有实现差异。把实验结果当作理解规则的地图,不要把它当成生产诊断报告。
CONFIG GET hash-max-listpack-*OBJECT ENCODING your:key提高紧凑编码阈值并不是免费的午餐:它可能省内存,也可能带来更多线性扫描、连续内存移动,以及越界转换时的一次性尾延迟。