Redis学习总结 -- ziplist

ziplist在Redis中使用非常广泛,List、Ordered Set、Hash中都可以看到ziplist的使用。
ziplist本质上使用一块内存实现了双向链表,相比传统的双向链表,它更好的利用了“局部性原理”以及产生更少的内存碎片,因此ziplist的内存使用效率更高,性能更好。此外,在小整数(0~12)的存储上,ziplist会更加节省内存(后面会进行具体分析)。然而,ziplist在插入/删除过程中,可能会导致级联更新,影响整个系统的性能。
在Redis中,对使用ziplist的场景都有一定的限制,比如元素节点个数、元素值大小,具体可参见Redis学习总结 - 内部数据结构。

ziplist简单来说,就是一个具有特殊编码的双向链表,下面我们具体学习ziplist的实现。

ziplist的数据结构

//ziplist这个结构体在源码中并未定义,根据源码文档整理而来。在创建ziplist时,默认这些信息
//存储形式:     ...  
struct ziplist {
  uint32_t zlbytes;  //the number of bytes that the ziplist occupies, including the four bytes of the zlbytes field itself
  uint32_t zltail

你可能感兴趣的:(实战总结分享)