鍊錶簡介:
因為c語言沒有內建鍊錶這種資料結構,所以redis構建了自己的鍊錶實現。列表鍵的底層實現之一就是鍊錶。當乙個列表鍵包含了數量比較多的元素,又或者列表中包含的元素都是比較長的字串時,redis就會使用鍊錶作為列表鍵的底層實現。
1、鍊錶實現:
鍊錶結點資料結構:
雖然使用多個listnode結構就可以組成鍊錶,但使用list來持有鍊錶的話,操作起來會更方便。
鍊錶資料結構:
list結構為鍊錶提供了表頭指標head、表尾指標tail,以及鍊錶長度計數器len,而dup、free和match成員則是用於實現多型鍊錶所需的型別特定函式:
2、特性:
雙端:鍊錶結點帶有prev和next指標,獲取某個節點前置節點和後置節點復制度都是o(1)
無環:表頭結點的prev指標和表尾結點的next指標都指向null,對鍊錶的訪問以null為終點。
帶表頭指標和表尾指標:獲取表頭節點和表尾節點復制度o(1)
帶鍊錶長度計數器:len屬性對list持有的鍊錶節點進行計數,獲取節點數量復制度o(1)
多型:使用void* 指標儲存節點值,通過list結構的dup、free、match三個屬性為節點值設定型別特定函式,所以鍊錶可以用於儲存各種不同型別的值。
重點回顧:
Redis資料結構 鍊錶
文章導航 readmeredis鍊錶為雙向無環鏈表!redis之資料結構篇 簡單動態字串sds提到redis使用了簡單動態字串,鍊錶,字典 雜湊表 跳躍表,整數集合,壓縮列表這些資料結構來操作記憶體,並且簡單介紹了redis簡單動態字串。本篇文章我們繼續來分析鍊錶。鍊錶是一種非常常見的資料結構,在r...
Redis資料結構之鍊錶
鍊錶基礎知識 鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序通過鍊錶中的指標鏈結次序來實現。其內部是由一系列的資料節點組成,資料節點可以動態分配。鍊錶與陣列的比較 陣列可以隨機訪問,鍊錶只能順序訪問。鍊錶容量可以動態擴充陣列不可以,鍊錶新增資料元素,不需要資料的移動。陣列新增元...
Redis資料結構 二 鍊錶
鍊錶提供了高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活的調整鍊錶的長度 列表鍵的底層實現之一就是鍊錶.當乙個列表鍵包含了數量比較多的元素,又或者列表中包含的元素都是比較長的字串時,redis就會使用鍊錶作為列表鍵的底層實現 除了列表鍵之外,發布與訂閱,慢查詢,監視器等功能...