跳躍表是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。
redis使用跳躍表作為有序集合鍵的底層實現之一,如果乙個有序集合包含的元素數量比較多,又或者有序集合中的元素的成員是比較長的字串時,redis就會使用跳躍表作為有序集合鍵的底層實現。
redis的跳躍表又redis.h/zskiplistnode和redis.h/zskiplist兩個結構定義,其中zskiplistnode結構用於表示跳躍表節點,而zskiplist結構用於儲存跳躍表節點的相關資訊,比如節點的數量,以及指向表頭節點和表尾節點的指標。
跳躍表節點的結構定義:
typedef struct zskiplistnodelevel;
}zskiplistnode
跳躍表結構定義:
typedef struct zskiplistzskiplist
header,tail指標分別指向跳躍表的表頭和表尾節點,通過這兩個指標,程式定位表頭和表尾節點的複雜度為o(1)。
通過使用length屬性來記錄節點的數量,程式可以在o(1)複雜度內返回跳躍表的長度。
level屬性則用在o(1)複雜度內獲取跳躍表中層高最大的那個節點的層數量,注意表頭節點的層高並不計算在內。
redis資料結構 跳躍表
跳躍表 skiplist 是一種有序資料鏈表結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。查詢平均效能為o logn 最壞的情況會出現o n 情況,而redis中的zset在資料較多的時候底層就是採用跳躍表去實現的,元素較少的時候會進行小物件壓縮採用壓縮列表實現。小...
Redis資料結構 skiplist(跳躍表)
跳躍表在redis中主要用於有序集合鍵的實現,其他地方沒怎麼用到,但是這種資料結構在面試的時候經常會問到,因為它作為一種查詢時間複雜度為o logn 的特殊的鍊錶,效率堪比紅黑樹或平衡樹,而實現難度卻遠小於它們。下面分3個模組講解redis的跳躍表實現 一 跳躍表的應用場景 在redis中,當有序集...
Redis資料結構之跳躍表
跳躍表在每個節點中維持多個指向其他節點的指標,可快速訪問節點且有序 跳躍表查詢複雜度為平均o logn 最壞o n 跳躍表使用於有序集合元素數量比較多或者元素是比較長的字串的場景。跳躍表節點 typedef struct zskiplistnode level 後退指標 struct zskipli...