乐趣区

关于redis:redis学习之五ziplist

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: 节点保留的内容。

退出移动版