redis学习之五ziplist

ziplist是redis为了提高内存使用率而构造的一种数据结构,它占用一整块连续的内存块,普通的链表在内存中是非连续的通过指针连接,不过它的缺点是会产生内存碎片;而对于数组来说它也是占用一整块连续的内存空间,但所存的数据类型却只能是相同的,ziplist的每个节点保存一个字节数组或者一个整数值。

我们先来看下ziplist的组成部分:
redis学习之五ziplist_第1张图片
zlbytes:记录整个ziplist占用的内存字节数,在进行内存重新分配时或计算zllen位置是使用。
zltail:记录ziplist尾节点到头节点的字节数,通知它可以快速定位到尾节点。
zllen:记录ziplist包含的节点数量。
entry:ziplist各节点,节点tayc由节点保存的内容决定。
zlend:特殊值0xFF(十进制255),用于标识ziplist的末端。

再来看下entry的组成部分:
redis学习之五ziplist_第2张图片

previous_entry:记录前一个节点的长度,可以通过指针运算,根据当前节点起始地址计算出前一个节点的起始地址。
encoding:保存数据的类型及长度。
content:节点值可以是一个字节数组或整数,值的类型和长度由节点的encoding属性决定。
看个示例:
redis学习之五ziplist_第3张图片
previous_entry_length值为0x05,说明前一个节点长度为5。
encoding值为00001011,高两位00说明节点保存的是一个字节数组(11为整数类型);后六位为001011说明字节数组长度是11。
content:节点保存的内容。

你可能感兴趣的:(redis)