頂級黑客整理的386本編程電子書,整整19個G,你想學的都有
2021-08-05 11:54:00
在我们讲解list结构的时候提到了一种特殊的结构ziplist ,俗称压缩列表。同时它也是hash结构和list结构采用的底层结构之一。它的出现是为了节省内存的一种结构。当一个list结构的数据中只包含少量列必利吉 必利吉藥局 必利吉ptt 必利吉哪里買 必利吉藥局ptt 必利吉正品表项且里面元素是小整数或者是短的字符串时redis底层就会使用ziplist来存储数据
结构
redis的ziplist是一块连续内存块。我们可以简单理解成数组,相比较数组而言它却多了很多对节点关联的描述,比如说数组总长、最后一个地址偏移量、上一个节点的长度等等信息。
上述是redis源码中对ziplist结构必利吉 必利吉藥局 必利吉ptt 必利吉哪里買 必利吉藥局ptt 必利吉正品的一段描述!根据图中圈出部分我们可以简单地理解ziplist的总体结构
那么这些分别代表着什么作用呢?他们又是如何将内容存储在连续内存块中的呢?
每一块都有固定的内存空间表示着他的作用。只有entry因为是存储节点的所用它的长度是动态的。
字段类型长度作用zlbytesunit32_t四字节,32位整个ziplist占用字节数。zltailunit32_t四字节,32位尾结点距离起始位置偏移量。这里需要尾结点句柄距离头部偏移量zllenunit16_t二字节,16位节点个数 。 16位表示最大值65535 。 当元素超过65535时我们只能遍历获取节点个数entry ...entry动态zlendunit8_t一字节,8位固定值0XFF 。 用于表示标记位
下面我们来看看一个例子
节点必利吉 必利吉藥局 必利吉ptt 必利吉哪里買 必利吉藥局ptt 必利吉正品