把list-max-listpack-size设成128,验证一个list在128个元素时是listpack编码,加第129个元素的瞬间变成quicklist。
List类型有两种的底层编码:小的时候是listpack,大的时候是quicklist。
操作CONFIG SET list-max-listpack-size 128 RPUSH 128个元素到ctrllist OBJECT ENCODING ctrllist
精确卡在配置的阈值上测试。
结果RPUSH 128个元素之后: OBJECT ENCODING ctrllist → :listpack LLEN ctrllist → 128 RPUSH 第129个元素之后: OBJECT ENCODING ctrllist → :quicklist LLEN ctrllist → 129
边界精确卡在配置值上:128个元素时还是紧凑的listpack(所有元素存在一段连续内存里),第129个元素一插入,Redis立刻把它转换成了quicklist——一个由多个listpack节点串成的双向链表,每个节点自己是一小段listpack,节点之间用链表指针连起来。
每一步都是本文上面用redis-cli跑出来的原始结果。
OBJECT ENCODING / CONFIG SET list-max-listpack-size:控制并观察编码转换