深入了解Redis【八】内部编码数据结构之压缩列表ziplist
引言
redis中的hash,list,zset在数据量小的时候都使用压缩列表ziplist。这些对应关系在redis源码的onject.c中可以看出来。
等最后写对象总结的时候再好好看看。
Ziplist 是为了尽可能地节约内存而设计的特殊编码双端链表。
结构
抄一段源码中别人放的注释:
1 | /* |
域 | 长度/类型 | 域的值 |
---|---|---|
zlbytes | uint32_t | 整个 ziplist 占用的内存字节数,对 ziplist 进行内存重分配,或者计算末端时使用。 |
zltail | uint32_t | 到达 ziplist 表尾节点的偏移量。 通过这个偏移量,可以在不遍历整个 ziplist 的前提下,弹出表尾节点。 |
zllen | uint16_t | ziplist 中节点的数量。 当这个值小于 UINT16_MAX (65535)时,这个值就是 ziplist 中节点的数量; 当这个值等于 UINT16_MAX 时,节点的数量需要遍历整个 ziplist 才能计算得出。 |
entryX | ? | ziplist 所保存的节点,各个节点的长度根据内容而定。 |
zlend | uint8_t | 255 的二进制值 1111 1111 (UINT8_MAX) ,用于标记 ziplist 的末端。 |
ziplist节点信息的结构:
1 |
|
参考:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!