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的各類功能,好比列表鍵、發佈和訂閱、慢查詢、監視器等。

相關文章
相關標籤/搜索