Redis原理篇(QuickList)

一.前言:ZipList出现的问题

QuickList的出现是为了解决ZipList所存在的一些问题

1.寻找大内存块,申请内存效率低

ZipList所申请的是连续的内存空间,如果ZipList里面存放的数据过多,就需要一块很大的连续内存,系统需要在物理内存中找到足够大的连续空闲块,大块内存的分配和释放可能导致内存碎片化问题。即使系统中总体上有足够的空闲内存,但这些内存可能分布在不同的位置,形成了碎片。如果没有足够大的连续空间来满足大块内存的需求,系统可能需要进行内存整理操作,以便在物理内存中找到足够大的连续块。这会引入额外的开销。

解决:必须限制ZipList的长度和entry的数量

2.所要存的数据超过了ZipList的最佳存储量

限制了ZipList的长度和entry的数量后,要是要存储大量数据,超过了限制,怎么办

解决:创建多个ZipList来分片存储数据

3.多个ZipList如何建立联系?

数据拆分后比较分散,不方便管理和查找,这多个ZipList如何建立联系?

解决:使用双端链表,每个节点都是一个ZipList

二.QuickList

Redis原理篇(QuickList)_第1张图片

QuickList的每个节点是一个ZipList

1.QuickList的list-max-ziplist-size来控制ZipList的大小

Redis原理篇(QuickList)_第2张图片 

2.QuickList的list-compress-depth来控制对ZipList的压缩 

Redis原理篇(QuickList)_第3张图片 3.QuickList的源码

 4.QuickList的结构

Redis原理篇(QuickList)_第4张图片

5.总结:QuickList结合了链表和ZipList的优点

链表的存储空间十分大,因为地址不需要连续,但缺点是会产生很多内存碎片

而ZipList内存占用少,产生的内存碎片少,缺点是存储量少

你可能感兴趣的:(redis,数据库,缓存)