Redis源码篇 - QuickList数据结构

Quicklist是Redis3.2之后引入的一个双向链表结构,其本质是对ziplist弊端的一个优化数据结构,ziplist是一种连续的内存空间,用于减少碎片化,减少内存占用,但是正是因为需要连续的内存空间,当数量越来越大时,导致内存空间申请效率很低。

为了缓解这种问题,就通过限制ziplist的大小以及数据分片的思想来优化,使用多个ziplist结构来存储。而quicklist就是用于管理这些分片ziplist的数据结构。

Redis源码篇 - QuickList数据结构_第1张图片

 优化1 :Ziplist限制

为了避免ziplist中的entry数量过多,Redis提供了相关配置用于线程quicklist中ziplist大小,配置项  list-max-ziplist-size :

  • 如果为正 ,则代表Ziplist的entry允许的最大个数。
  • 如果为负,则代表Ziplist的最大内存大小,5种情况:(默认-2)  
  • -1 :每个ziplist不超过4kb
    -2 :每个ziplist不超过8kb
    -3 :每个ziplist不超过16kb
    -4 :每个ziplist不超过32kb
    -5 :每个ziplist不超过64kb

优化2 :Quicklist节点压缩

除了控制Ziplist大小,Quicklist还可以对节点的Ziplist进行压缩,通过配置list-compress-depth来控制。因为链表一般来说首尾访问较多,所以首尾是不压缩的,这个参数是控制首尾不压缩的节点个数。

  • 0 :默认值,不压缩。
  • 1:   表示Quicklist首尾个1个节点不压缩,中间节点压缩。
  • 2:   表示Quicklist首尾个2个节点不压缩,中间节点压缩。
  • 以此类推...

你可能感兴趣的:(redis,数据结构,数据库)