【Redis】快速列表(QuickList)

QuickList

QuickList是Redis3.2版本中新增加的一种数据结构类型,在该版本后替代原有的ZipList+LinkedList的链表底层,成为新的链表底层数据结构。

它的定义在quicklist.c中如下:

	A doubly linked list of ziplists. //一个由ziplist组成的双向链表。

通过定义可知,该结构满足原链表底层的需求,且全程使用zipList,无需判断是否需要使用zipList,
(关于ZipList可以看【Redis】压缩列表


理解

QuickList作为一个双向链表,它的节点存储的是ZipList,而ZipList中又存储了4个entry节点,用来存放数据,这样的话QuickList进行插入或删除操作时非常方便,虽然复杂度为O(n),但是对比之前ZipList的连锁更新机制,不需要大量的内存复制,提高了效率, 而且访问两端元素复杂度为O(1)。


差异

  • 在redis3.2之前,原本链表底层是使用ZipList+LinkedList,在<key,value>中的value满足ZipList要求的前提下,默认使用zipList编码形式进行存储,否则将使用linkedList编码形式进行存储。
  • 而在redis3.2之后,已经没有曾经的编码转换,默认使用quickList编码形式进行存储。
  • QuickList可以理解为将曾经的一整个ZipList转换为多个ZipList的拼接,ZipList本身的设计理念便是舍弃冗余空间来做到节约内存,是一种快查慢增删的数据结构。而QuickList的这种设计方式明显使ZipList的查询速度更上一层楼,在增删方面也通过控制ZipList 的数量来得以优化。
  • 在理想状态下,这种设计方式使ZipList在触发连锁更新的时候只会影响到一部分的zipList,使得效率大大提高。(实质上连锁更新概率很低)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值