Redis 學習 5 跳躍表

2021-07-10 13:40:03 字數 808 閱讀 2445

和鍊錶、字典等資料結構被廣泛地應用在redis內部不同,redis只在倆個地方用到了跳躍表,乙個是實現有序集合鍵,另乙個是在集群結點中用作內部資料結構,除此之外,跳躍表在redis裡面沒有其他用途。

跳躍表(skiplist)是一種有序資料結構,他通過在每個結點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。

跳躍表支援平均o(logn)、最壞o(n)複雜度的節點查詢

在大部分情況下,跳躍表的效率可以和平衡樹相媲美,並且因為跳躍表的實現比平衡樹更為簡單,所以有不少程式都使用跳躍表來代替平衡樹。

redis使用跳躍表作為有序集合鍵的底層實現之一,如果乙個有序集合包含的元素數量比較多,又或者有序集合中元素的成員是比較長的字元場時,redis就會使用跳躍表作為有序集合鍵的底層實現。

redis的跳躍表由redis.h/zskiplistnode 和 redis.h/zskiplist倆個結構定義

typedef struct zskiplistnode  level;

} zskiplistnode;

typedef struct zskiplist zskiplist;

重點回顧

跳躍表是有序集合的底層實現之一

redis的跳躍表由zskiplist和zskiplistnode倆個結構組成

每個跳躍表結點的層高都是1至32之間的隨機數。

在同乙個跳躍表中,多個節點可以包含相同的分值,但每個結點的成員物件必須是唯一的。

跳躍表中的結點按照分值大小進行排序,當分值相同時,節點按照成員物件大小進行排序

Redis學習 4 跳躍表(skiplist)

跳躍表 skiplist 是一種有序的資料結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。它的效率可以媲美平衡樹,跳躍表的平均複雜度o logn 最壞情況複雜度o n 並且其原理和 都要比平衡樹更加簡單,因此很多地方多用跳躍表代替平衡樹。1,redis使用跳躍表作為有...

Redis學習筆記(四) 跳躍表

跳躍表是一種以o log n 期望時間支援查詢 插入 刪除操作的 有序的資料結構。redis使用跳躍表作為有序集合鍵的底層實現之一。跳表的基本實現原理參考 skip lists a probabilistic alternative to balanced trees redis的跳表由zskipl...

Redis的跳躍表

typedef struct zskiplistnode level 層 層高1 32隨機,一般層數量越多,訪問其他節點速度越快 struct zskiplistnode backward 後退指標 只能退至前乙個節點 double score 分值 所有節點按分值從小到大排序 robj obj 成...