作为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构成的双向链表;
``````
敬请关注。 你的支持对我来说一定是最大的支持。