鏈表提供了高效的節點重排能力,以及順序性的節點訪問方式,而且能夠經過增刪節點來靈活地調整鏈表的長度。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的各類功能,好比列表鍵、發佈和訂閱、慢查詢、監視器等。