链表提供了高效的节点重排能力,以及顺序性的节点访问方式,而且能够经过增删节点来灵活地调整链表的长度。redis提供五种数据结构:String、hash、list、set、sorted set。这五大数据类型底层有不一样的实现方式,给咱们在数据结构类型的选择上更方便。底层数据结构的实现主要分为如下几块:链表、字典、跳跃表、整数集合、压缩列表、对象。首先来分析一下链表。redis
(1)listNode节点数据结构
在adlist.h结构来表示链表节点,以下图所示,大数据
listNode经过prev和next指针组成双端链表:,以下图所示:指针
(2)list节点对象
虽然仅仅使用多个listNode结构就能够组成链表,但使用adlist.h/list来持有链表的话,操做起来更方便,以下图所示:hash
list结构为链表提供了表头指针、表尾指针、链表长度计数器、而dup用于复制链表节点所保存的数、 free用于释放链表节点所保存的值、match用于比较链表节点所保存的值和另外一个输入值是否相等。数据类型
list节点和listNode节点的关系能够用下图来表示;im
(3)总结链表
redis链表实现的特性总结以下:总结
(i)双端:获取某个节点的前置节点和后置节点的复杂度都是O(1)。
(ii)无环。
(iii)带表头指针和表尾指针
(iv)带链表长度计数器
(v)多态。
(4)用途
链表普遍应用于实现redis的各类功能,好比列表键、发布和订阅、慢查询、监视器等。