跳表(skiplist)
跳表由多层链表组成,通过先比较上一层的大小,就可以很快找到该值在下一层的区间范围。时间复杂度为log(n).
Redis的zset,有序集合,是字典(dict)+ 跳表(skiplist)来实现的。
数据只有同样一份,字典中与跳表中都是存放的指针。
压缩列表
压缩列表ziplist本质上就是一个字节数组,是Redis为了节约内存而设计的一种线性数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。使用压缩算法,将数据进行压缩后,节省空间。
当元素长度较小时,采用ziplist可以有效节省存储空间,但ziplist的存储空间是连续的,当元素个数比较多时,修改元素时,必须重新分配存储空间,这无疑会影响Redis的执行效率,故而采用一般的双向链表。
quicklist
quicklist是Redis底层最重要的数据结构之一,它是Redis对外提供的6种基本数据结构中List的底层实现。
quicklist实际上是ziplist与linkedList的混合,它将linkedList按段切分,每一个段使用ziplist来存储。多个ziplist使用双向指针串联起来