redis原始碼解析 跳躍表

2021-08-20 06:51:36 字數 707 閱讀 3593

定義:

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

跳躍表支援平均o(logn),最壞o(n)複雜度的節點查詢,大部分情況下,跳躍表的效率可以和平衡樹相媲美,

並且因為跳躍表的實現比平衡樹要來得簡單,所以有不少程式都使用跳躍表來替代平衡樹。

從圖中可以看到:

redis使用跳躍表作為有序集合鍵的底層實現之一,如果乙個有序集合包含你的元素較多,或者成員字串較長,redis就會使用跳躍表來作為有序集合的底層實現。

核心資料結構:

typedef

struct zskiplistnode level;

} zskiplistnode;

typedef

struct zskiplist zskiplist;

zskiplistnode結構用於表示跳躍表節點,zskiplist保持跳躍表節點的相關資訊,如節點數量,表頭表尾等。

redis原始碼學習之跳躍表

跳躍表對於我來說是乙個比較陌生的資料結構,因此花了一上午的時間先看了一蛤mit的公開課。網易雲課堂 mit跳躍表 什麼是跳躍表,有乙個很簡單的例子,有些地方的火車站跟高鐵站是同乙個站,有的地方只有火車站 假設現在的線路是a b c d e。其中a和c剛剛說的高鐵和火車站在一塊,其他的只有火車站,考慮...

Redis(三)跳躍表介紹及原始碼

查詢鍊錶的時間複雜度o n 即使該鍊錶的是有序的,但若我們在鍊錶上在加一層鏈,且每次跳過乙個節點 即進行一次二分 如下圖所示 若在l2鏈的基礎上增加一層鏈,在每次跳過l2上的乙個節點 即在l2鏈上進一步二分 那麼我便可以進一步增加搜尋速度,如下圖所示 此時查詢8只需在l3上搜尋2次,查詢7需要3次 ...

redis zskiplist 跳躍表原始碼學習

typedef struct zskiplistnode level index越大表示層級越高 zskiplistnode typedef struct zskiplist zskiplist typedef struct zset zset 命令 zadd key score value zsk...