quicklist节点结构:
- typedef struct quicklistNode {
- struct quicklistNode *prev; //前驱节点指针
- struct quicklistNode *next; //后继节点指针
- //不设置压缩数据参数recompress时指向一个ziplist结构
- //设置压缩数据参数recompress指向quicklistLZF结构
- unsigned char *zl;
- //压缩列表ziplist的总长度
- unsigned int sz; /* ziplist size in bytes */
- //ziplist中包的节点数,占16 bits长度
- unsigned int count : 16; /* count of items in ziplist */
- //表示是否采用了LZF压缩算法压缩quicklist节点,1表示压缩过,2表示没压缩,占2 bits长度
- unsigned int encoding : 2; /* RAW==1 or LZF==2 */
- //表示一个quicklistNode节点是否采用ziplist结构保存数据,2表示压缩了,1表示没压缩,默认是2,占2bits长度
- unsigned int container : 2; /* NONE==1 or ZIPLIST==2 */
- //标记quicklist节点的ziplist之前是否被解压缩过,占1bit长度
- //如果recompress为1,则等待被再次压缩
- unsigned int recompress : 1; /* was this node previous compressed? */
- //测试时使用
- unsigned int attempted_compress : 1; /* node can't compress; too small */
- //额外扩展位,占10bits长度
- unsigned int extra : 10; /* more bits to steal for future usage */
- } quicklistNode;
相关配置
在redis.conf中的ADVANCED CONFIG部分:
- list-max-ziplist-size -2
- list-compress-depth 0
list-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——一种无损压缩算法。
【编辑推荐】
- 超详细的各种数据库默认驱动、URL、端口总结
- 一文了解各种数据库默认驱动、URL、端口
- 一次诡异的数据库“死锁”,问题究竟在哪里?
- Web端开源的多数据库支持管理工具,终于发现它了
- 分布式Redis的分布式锁Redlock
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|