你知道 Redis数据结构底层实现吗?一文详解,彻底弄懂( 四 )


在redis.conf中的ADVANCED CONFIG部分:
list-max-ziplist-size -2list-compress-depth 0list-max-ziplist-size参数
我们来详细解释一下list-max-ziplist-size这个参数的含义 。它可以取正值,也可以取负值 。
当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度 。比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项 。
当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度 。这时,它只能取-1到-5这五个值,每个值含义如下:
-5: 每个quicklist节点上的ziplist大小不能超过64 Kb 。(注:1kb => 1024 bytes)
-4: 每个quicklist节点上的ziplist大小不能超过32 Kb 。
-3: 每个quicklist节点上的ziplist大小不能超过16 Kb 。
-2: 每个quicklist节点上的ziplist大小不能超过8 Kb 。(-2是Redis给出的默认值)
list-compress-depth参数
这个参数表示一个quicklist两端不被压缩的节点个数 。注:这里的节点个数是指quicklist双向链表的节点个数,而不是指ziplist里面的数据项个数 。实际上,一个quicklist节点上的ziplist,如果被压缩,就是整体被压缩的 。
参数list-compress-depth的取值含义如下:
0: 是个特殊值,表示都不压缩 。这是Redis的默认值 。1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩 。2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩 。3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩 。依此类推…
Redis对于quicklist内部节点的压缩算法,采用的LZF——一种无损压缩算法 。




推荐阅读