| 
                         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                        (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |