前言
redis的quicklist 其实是linkedlist 与ziplist的结合体
linkedlist
linkedlist 是一种双线链表
ziplist
ziplist 也叫压缩列表,它内部的数据存储是一段连续的空间
特点
● 列表对象保存的字符串元素的长度都小于64个字节
● 列表对象保存的元素小于512个
在redis3.2时如果以上条件没有满足的换将会选用linkedlist作为底层实现
quicklist
quicklist是在redis3.2之后引入的quicklist其实现也是依赖于ziplist和linkedlist来实现的,它是两个结构的结合。它将ziplist来进行分段存储,也就是分成一个个的quicklistNode节点来进行存储。每个quicklistNode指向一个ziplist,然后quicklistNode之间是通过双向指针来进行连接的
为什么要把底层数据结构优化成quicklist?
- ziplist这个结构,它内部的数据存储是一段连续的空间,这样的话,就要求很大一块内存空间。就比如说,我们想存储很多的数据,但是内存中并没有符合要求的连续的存储空间,而是存在很多不连续的小空间(加起来可以符合要求)。
- 再来说说linkedlist这个结构,它数据存储不要求连续,就可以避免上面的弊端,不过这样以来,每个节点都分配一个一块内存,那就有可能造成大量的内存碎片
综上两个考虑,redis在3.2版本以后就对此情况进行了优化,就出来了quicklist这个数据结构,quicklist其实就是一个分段的ziplist,为什么这么说呢?其实quicklist存储数据基本单位是quicklistNode
扩展学习
● https://www.yuque.com/u2457372/vvicfx/xkoih9#LiH1U
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。