主要构成:list结构+listNode结构,Redis链表的特性也是和这两个结构及其各个的属相字段相关的。
listNode结构
list结构
虽然多个listNode节点就可以连成链表,但是引入list结构后,操作活更加的方便,所有redis的链表一般是如下图所示:
从上面的链表结构图,我们可以轻易的总结出链表的特点
1:双端。listNode节点之间是一个双向链表,即每一个节点都有next和pre指针,这样就可以将获取某个节点的前驱或者后继值的复杂度降为O(1)。
2:list结构中含有head和tail指针,这样对链表头节点和尾节点的获取的时间复杂度为O(1)。
3:list结构中含有len,这样对链长度的获取的时间复杂度为O(1)。(有点类似于sds中获取长度)
4:无环。即不是循环的。这样对链表的遍历的中止条件是以NULL中止。注意和循环双向链表的区别。
5:多态:list结构含有三个特定函数,执行对应的特定操作。