[Redis] list底层的数据结构

前面咱们使用list实现过队列 , 如今就来看一下list的底层结构redis

list有两种实现方式:数组

1. 压缩链表数据结构

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表能够包含任意多个节点(entry),每一个节点能够保存一个字节数组或者一个整数值。重点是内存连续ui

2.双端链表编码

prev和next两个指针 , 重点是能够从前日后也能够从后往前 , 这就能够实现lpush rpush这些指令了spa

 

由于用的链表 , 因此这也就致使了lindex指令 , 获取某个索引值的元素 , 须要遍历链表才能够获取到 , 时间复杂度是 O(n)指针

 

当列表对象能够同时知足下列两个条件时,列表对象采用压缩链表编码:对象

(1)列表对象保存的全部字符串元素的长度都小于64字节;索引

(2)列表元素保存的元素数量小于512个;队列

以上两个条件的上限值能够在配置文件中修改 list-max-ziplist-value选项和 list-max-ziplist-entries选项

不然采用双端链表编码

 

redis3.2版本之后采用的快速列表

quicklist 是一个双向链表,而且是一个ziplist的双向链表,也就是说quicklist的每一个节点都是一个ziplist。结合了二者的优势

相关文章
相关标签/搜索