redis数据结构之一:链表

        链表提供了高效的节点重排能力,以及顺序性的节点访问方式,而且能够经过增删节点来灵活地调整链表的长度。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的各类功能,好比列表键、发布和订阅、慢查询、监视器等。

相关文章
相关标签/搜索