之前的文章我曾总结到了Redis数据结构一链表和Redis数据结构一压缩列表这两种数据结构,他们是Redis List(列表)对象的底层实现方式。
但是考虑到艇表的附加空间相对太高,prev和next 指针就要占去 16个字节(64bit 系统的指针是8个字节),另外每个节点的内存都是单独分配,会加剧内存的碎片化,影响内存管理效率。
因此Redis3.2版本开始对列表数据结构进行了改造,使用quicklist代替了 ziplist和 linkedlist.
如图:
一、基本结构
quicklist 实际上是ziplist和linkedList的混合体,它将linkedList 按段切分,每一段使用ziplist 来紧凑存储,多个zipList之间使用双向指针串接起来。