Redis 學習筆記 資料結構(1)

2021-10-03 05:37:32 字數 996 閱讀 4292

sds(簡單動態字串)

sds的實現

struct sdshdr 

;

問題:為什麼redis沒有直接使用c語言的字串而是使用了sds(****** dynamic string)呢? 鍊錶

鍊錶的實現

typedef

struct list list;

typedef

struct listnode listnode;

特點:

字典(map,一直鍵值對抽象資料結構)

字典的實現:

//字典

typedef

struct dict dict;

//雜湊表

typedef

struct dictht dictht;

//雜湊表節點

typedef

struct dictentity v;

} dictentity;

展示圖:

rehash步驟:

為字典的ht[1]雜湊表分配空間,這個雜湊表的空間大小取決於要執行的操作,以及ht[0]當前包含的鍵值對數量(也即是ht[0] .used屬性的值):

將儲存在ht[0]中的所有鍵值對rehash到ht[1]上面: rehash指的是重新計算鍵的雜湊值和索引值,然後將鍵值對放置到ht[1]雜湊表的指定位置上。

當ht[0]包含的所有鍵值對都遷移到了ht[1]之後(ht[0]變為空表),釋放ht[0],將ht[1]設定為ht[0],並在ht[1]新建立-乙個空白雜湊表,為下一次rehash .做準備。

漸進式rehash:擴充套件或收縮雜湊表需要將ht[0]裡面的所有鍵值對rehash到ht[1]裡面,但是,這個rehash動作並不是一次性、集中式地完成的,而是分多次、漸進式地完成的。

Redis 學習筆記 資料結構(2)

跳躍表 skiplist 跳躍表的實現 typedef struct zskiplist zskiplist typedef struct zskiplistnode level 後退指標 struct zskiplistnode backward 分值 double score 成員物件 obj ...

學習筆記 資料結構

一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...

學習筆記 資料結構 堆結構

堆結構 實質是陣列 特點 以陣列的形式去儲存完全二叉樹 原理 以前序遍歷完全二叉樹,得出結點的前序序列,以陣列的形式儲存該序列。查詢父,子結點通過陣列下標id間的轉換關係實現。優點 節省儲存空間,查詢效率高 缺點 1 只能表示完全二叉樹 更廣泛的可以說是完全n叉樹 2 對樹的插入,刪除操作執行效率低...