Redis跳表,压缩表,quicklist

跳表(skiplist)

跳表由多层链表组成,通过先比较上一层的大小,就可以很快找到该值在下一层的区间范围。时间复杂度为log(n).

skiplist.jpg

Redis的zset,有序集合,是字典(dict)+ 跳表(skiplist)来实现的。
数据只有同样一份,字典中与跳表中都是存放的指针。

压缩列表

ziplist.jpg

压缩列表ziplist本质上就是一个字节数组,是Redis为了节约内存而设计的一种线性数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。使用压缩算法,将数据进行压缩后,节省空间。

当元素长度较小时,采用ziplist可以有效节省存储空间,但ziplist的存储空间是连续的,当元素个数比较多时,修改元素时,必须重新分配存储空间,这无疑会影响Redis的执行效率,故而采用一般的双向链表。

quicklist

quicklist.jpg

quicklist是Redis底层最重要的数据结构之一,它是Redis对外提供的6种基本数据结构中List的底层实现。

quicklist实际上是ziplist与linkedList的混合,它将linkedList按段切分,每一个段使用ziplist来存储。多个ziplist使用双向指针串联起来

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容