Redis的底層資料結構 跳表

2022-09-09 09:54:13 字數 1020 閱讀 5248

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

1、由很多層結構組成;

2、每一層都是乙個有序的鍊錶,排列順序為由高層到底層,都至少包含兩個鍊錶節點,分別是前面的head節點和後面的nil節點;

3、最底層的鍊錶包含了所有的元素;

4、如果乙個元素出現在某一層的鍊錶中,那麼在該層之下的鍊錶也全都會出現(上一層的元素是當前層的元素的子集);

5、鍊錶中的每個節點都包含兩個指標,乙個指向同一層的下乙個鍊錶節點,另乙個指向下一層的同乙個鍊錶節點;

redis中跳躍表節點定義如下:

typedef struct zskiplistnode level;

//後退指標

struct zskiplistnode *backward;

//分值

double score;

//成員物件

robj *obj;

} zskiplistnode

多個跳躍表節點構成乙個跳躍表:

①、搜尋:從最高層的鍊錶節點開始,如果比當前節點要大和比當前層的下乙個節點要小,那麼則往下找,也就是和當前層的下一層的節點的下乙個節點進行比較,以此類推,一直找到最底層的最後乙個節點,如果找到則返回,反之則返回空。

②、插入:首先確定插入的層數,有一種方法是假設拋一枚硬幣,如果是正面就累加,直到遇見反面為止,最後記錄正面的次數作為插入的層數。當確定插入的層數k後,則需要將新元素插入到從底層到k層。

③、刪除:在各個層中找到包含指定值的節點,然後將節點從鍊錶中刪除即可,如果刪除以後只剩下頭尾兩個節點,則刪除這一層。

Redis底層資料結構?

福哥口訣法 簡鏈字跳整 壓快壓 sds synamic string 簡單動態字串。支援自動動態擴容的位元組陣列 list 鍊錶 雙端鍊錶。dict 字典。使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 跳躍表。附加了後向指標的跳躍表 intset 整數集合。用於儲存整數數值集合的自有結...

Redis底層資料結構

redis底層實現的8種資料結構 sds synamic string 支援自動動態擴容的位元組陣列 list 鍊錶 dict 使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 附加了後向指標的跳躍表 intset 用於儲存整數數值集合的自有結構 ziplist 一種實現上類似於tlv,但...

redis底層資料結構

1.1 string字串 表現形式為 資料結構 sds 簡單的動態字串 使用原因 redis是使用c語言開發的,但在c語言中是沒有字串型別的,只能使用指標或符陣列的形式表示乙個字串,所以在redis設計了一種簡單的動態字串 可以根據不同的資料型別不同的資料結構選擇不同的資料結構 支援的資料型別 字串...