ziplist是redis为了进步内存使用率而结构的一种数据结构,它占用一整块间断的内存块,一般的链表在内存中是非间断的通过指针连贯,不过它的毛病是会产生内存碎片;而对于数组来说它也是占用一整块间断的内存空间,但所存的数据类型却只能是雷同的,ziplist的每个节点保留一个字节数组或者一个整数值。
咱们先来看下ziplist的组成部分:
zlbytes:记录整个ziplist占用的内存字节数,在进行内存重新分配时或计算zllen地位是应用。
zltail:记录ziplist尾节点到头节点的字节数,告诉它能够疾速定位到尾节点。
zllen:记录ziplist蕴含的节点数量。
entry:ziplist各节点,节点tayc由节点保留的内容决定。
zlend:非凡值0xFF(十进制255),用于标识ziplist的末端。
再来看下entry的组成部分:
previous_entry:记录前一个节点的长度,能够通过指针运算,依据以后节点起始地址计算出前一个节点的起始地址。
encoding:保留数据的类型及长度。
content:节点值能够是一个字节数组或整数,值的类型和长度由节点的encoding属性决定。
看个示例:
previous_entry_length值为0x05,阐明前一个节点长度为5。
encoding值为00001011,高两位00阐明节点保留的是一个字节数组(11为整数类型);后六位为001011阐明字节数组长度是11。
content:节点保留的内容。