Redis學習筆記(四) 跳躍表

2021-10-17 08:38:14 字數 1157 閱讀 8745

跳躍表是一種以o(log n)期望時間支援查詢、插入、刪除操作的、有序的資料結構。

redis使用跳躍表作為有序集合鍵的底層實現之一。

跳表的基本實現原理參考:《skip lists: a probabilistic alternative to balanced trees》

redis的跳表由zskiplistnode, zskiplist兩個資料結構定義。

跳躍表節點的實現如下,由redis.h/zskiplistnode定義:

/* zsets use a specialized version of skiplists */

typedef struct zskiplistnode level; // 層

} zskiplistnode;

redis中跳表和普通跳表區別如下:

redis通過zskiplist結構來持有跳表:

typedef struct zskiplist  zskiplist;
api

功能複雜度

zskiplist *zslcreate(void);

建立跳表

o(1)

void zslfree(zskiplist *zsl);

釋放跳表

o(1)

zskiplistnode *zslinsert(zskiplist *zsl, double score, sds ele);

插入o(logn)

int zsldelete(zskiplist *zsl, double score, sds ele, zskiplistnode **node);

刪除跳表

o(logn)

unsigned long zslgetrank(zskiplist *zsl, double score, sds ele);

返回給定節點的排位

o(logn)

zskiplistnode* zslgetelementbyrank(zskiplist *zsl, unsigned long rank);

返回指定排位的節點

o(logn)

《redis設計與實現》第5章 跳躍表

四 跳躍表(Redis)

跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的 指標,從而達到快速訪問節點的目的。redis 的跳躍表由 redis.h zskiplistnode 和 redis.h zskiplist 兩個結構定 義,其中zskiplistnode結構用於表示跳躍表節點,...

Redis 閱讀筆記 跳躍表

跳躍表是一種有序資料結構,他通過每個節點維持多個指向其他節點的指標,從而達到快速訪問的目的。跳躍表平均支援o logn 最壞o n 複雜度的節點查詢,還可以通過順序性來批量處理節點。redis使用跳躍表作為有序集合鍵的底層實現之一,如果乙個有序集合包含的元素的數量比較多,或者有序集合中元素的成員是比...

Redis 學習 5 跳躍表

和鍊錶 字典等資料結構被廣泛地應用在redis內部不同,redis只在倆個地方用到了跳躍表,乙個是實現有序集合鍵,另乙個是在集群結點中用作內部資料結構,除此之外,跳躍表在redis裡面沒有其他用途。跳躍表 skiplist 是一種有序資料結構,他通過在每個結點中維持多個指向其他節點的指標,從而達到快...