快速列表 quicklist 了解吗?
快速列表 quicklist 了解吗?
在早期版本的Redis中,用于存储列表数据结构的方式是通过压缩列表(ziplist)和普通双向链表(linkedlist)。简而言之,当元素较少时,使用压缩列表;当元素较多时,使用双向链表。
然而,考虑到链表的附加空间较大,每个节点需要占用16
个字节(在64位操作系统上占用8
个字节),而且每个节点的内存是单独分配的,可能导致内存碎片化,从而影响内存管理的效率。
为了改进这一情况,Redis在新版本(3.2)中对列表数据结构进行了改进,引入了名为quicklist
的新数据结构,用于取代压缩列表和双向链表。quicklist
是一种将压缩列表充当节点的双向链表的综合数据结构,它综合考虑了时间效率和空间效率。
quicklist
结构将多个压缩列表(ziplist)节点连接在一起形成链表,每个节点代表一个压缩列表。这样,可以兼顾了压缩列表的紧凑性和双向链表的灵活性,提高了列表数据结构的性能和内存利用效率。
通过引入quicklist
,Redis在列表数据的存储和操作上取得了更好的平衡,提供了更高效的列表处理能力。