用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
`ziplist`是为了节省内存而设计出来的一种数据结构。`ziplist`是由一系列特殊编码组成的连续内存块的顺序型数据结构,一个`ziplist`可以包含任意多个`entry`,而每一个`entry`又可以保存一个字节数组或者一个整数值。 `ziplist`作为一种列表,其和普通的双端列表,如`linkedlist`的最大区别就是:`ziplist`并不存储前后节点的指针,而`linkedlist`一般每个节点都会维护一个指向前置节点和一个指向后置节点的指针。那么`ziplist`不维护前后节点的指针,它又是如何寻找前后节点的呢? `ziplist`虽然不维护前后节点的指针,但是它却维护了上一个节点的长度和当前节点的长度,然后每次通过长度来计算出前后节点的位置。既然涉及到了计算,那么相对于直接存储指针的方式肯定有性能上的损耗,这就是一种典型的用**时间来换取空间**的做法。因为每次读取前后节点都需要经过计算才能得到前后节点的位置,所以会消耗更多的时间。而在`Redis`中,一个指针是占了`8`个字节,但是大部分情况下,直接存储长度是达不到`8`个字节的,所以采用存储长度的设计方式在大部分场景下是可以节省内存空间的。