首页 > 编程知识 正文

redis ziplist(redis获取list所有数据)

时间:2023-05-05 07:33:41 阅读:83837 作者:555

作为HotFrameLearning (简称HFL ) Redis_08_list类型基础的存储数据结构

_

一、粗略介绍

``````

1、上一篇说明了string的基础数据结构,但感觉意义还不够。 大家知道list的基础数据结构吗?

2、这里不是热门产品,接下来参考redis-6.0.6源代码介绍一下list的基础数据结构吧;

``````

二、list数据结构

2.1源代码详细信息(l推/r推) ) )。

图list节点数据的存储

``````

1、在图1中,可以看到有左推和右推两种方法。

2、最终lpushCommand、rpushCommand调用pushGenericCommand这一核心方法;

3、在pushGenericCommand核心方法中,如果对象不存在,则通过createQuicklistObject方法构建quilist列表对象; 然后,使用listTypePush方法将值推送到列表中

``````

2.2源代码详细信息(createQuicklistObject ) )。

图2 - createQuicklistObject方法

图3 -快速列表创建方法

图4 -快速列表数据结构

图5 -快速监听器数据结构

``````

1、在图2中,创建了类型为OBJ_LIST类型,编码代码为obj _编码_快速列表类型的快速列表。

2、在图3中,创建了带有头和尾双向链表的快速列表对象。

3、图4显示了快速列表的内部结构。 有头和尾的双向链表,

4、在图5中,示出了快速列表内部的头、尾的内部结构体,但该快速列表是用于描述所谓的zip列表的;

``````

2.3源代码详细信息(listTypePush ) )。

图6-listtype推送方法

图7 -快速列表推送方法

图8-quicklistpushhead/quicklistpushtail方法

``````

1、在图5中,整体说明的是将新的value压入快速列表。

2、在图6中,针对头插法、尾插法2种分别调用不同的方法将value放入列表:

3、在图8中,无论是头插还是尾插,总之是对ziplist的操作,如果没有就制作ziplist,如果有就将value压入ziplist;

``````

2.4源代码总结

图9 -列表基础结构

``````

1、在图9中,用一张图总结list的基础数据结构;

2、list的基础结构是由qucikList或quicklistnode构成的双向链表;

``````

敬请关注。 你的支持对我来说一定是最大的支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。