数据结构论坛

注册

 

发新话题 回复该主题

Redis核心技术与实战学习总结二 [复制链接]

1#
北京治疗白癜风医院那家比较好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/nxbdf/

的遗留问题

总结了一个KV数据库的基本架构和Redis的底层数据结构概览,重点总结了SortedSet的两个数据结构的切换,但没有介绍List的两个数据结构的切换,因此本文试着总结一下。

这里先直接给出答案:

从上图可以看到,当List的数据满足下面两个条件时,就会使用压缩列表,否则使用双向链表。

(1)列表对象保存的所有字符串元素的长度都小于64字节;

(2)列表对象保存的元素数量小于个;

这两个参数其实也是可以在redis.conf中修改的:

list-max-ziplist-value64list-max-ziplist-entries

Redis3.2之前的实现

由已经知道,List类型的底层实现包括了双向链表和压缩列表,但这是在Redis的3.2版本之前的底层实现。而从Redis3.2版本开始,Redis修改了List的底层实现,将压缩列表和双向链表结合,我们称它为quickList快速列表。

从第一节的内容我们已经知道,当创建一个新的List时,Redis会优先使用压缩列表,然后在有需要的时候,再转成双向链表。

Redis为什么要这么设计呢?

因为,双向链表的内存占用比压缩列表多,而压缩列表的设计初衷就在于节约内存。众所周知,Redis之所以快的原因之一就是它是内存数据库,所有操作都在内存上完成,因此对于内存的占用有要求。

双向链表

压缩列表

画外音:在Redis3.2之前,我们也可以通过命令来验证:

..80.:rpushtestkey"edison""andy""leo"3..80.bjectencodingtestkeyziplist..80.:rpushtestkey"

分享 转发
TOP
发新话题 回复该主题