Redis設計與實現 筆記(1) 基礎資料結構篇

2021-10-04 16:11:42 字數 1276 閱讀 8540

1、redis自己構建了乙個名為sds(****** dynamic string)的字串資料結構。

struct sdshdr 

;//遵循了c字串以空字元(佔1位元組)結尾的慣例,且該空字元不計入len屬性;

2、sds的空間分配策略

1、listnode

typedef

struct listnodelistnode;

2、list結構

typedef

struct list list;

3、鍊錶特性總結:

1、底層使用雜湊表實現

typedef

struct dictht dictht;

typedef

struct dictentry v;

//值struct dictentry *next;

//使用鏈位址法解決雜湊衝突

} dictentry;

2、字典的資料結構

typedef

struct dict dict;

typedef

struct dicttype dicttype;

3、rehash

4、擴充套件與收縮

5、字典特性彙總:

1、跳躍表結點

typedef

struct zskiplistnode level;

//層陣列的大小為1-32之間,使用冪次定律隨機生成

struct zskiplistnode *backward;

//後退指標

double score;

//分值

robj *obj;

//成員物件

} zskiplistnode;

2、跳躍表實現

typedef

struct zskiplist zskiplist;

//似乎表頭結點固定了有32層大小。

3、跳躍表特性總結:

1、intset

typedef

struct intset intset;

2、公升級(當新增的新元素超過陣列元素型別的長度時,需要進行公升級)

1、壓縮列表是一系列連續記憶體塊組成的順序型資料結構

2、壓縮列表各部分組成如下(按序)

3、壓縮列表節點的構成

redis設計與實現 讀書筆記1

乙個業務模型引出對redis的好奇 提出問題 1.redis 的五種資料型別分別由什麼資料結構實現?2.redis 的字串型別既可以儲存字串,也可以儲存整數和浮點數,甚至是二進位制位 使用setbit redis 內部是如何實現儲存這些值?3.redis的一部分命令只能對特定的資料型別執行 而另一部...

Redis 設計與實現閱讀筆記(一)

一 簡單動態字串 sds sds通過使用乙個結構如下 struct sdshdr len是字串長度,free是快取區中的剩餘大小,通過使用len記錄字串的長度,可以快速的實現字串的長度獲取,並且可以避免複製相關的操作的溢位。利用free實現對字串儲存空間的預分配和惰性釋放,來實現高效的字串的相關操作...

《redis設計與實現》讀書筆記

sds dynamic string 比起 c 字串,sds 具有以下優點 len屬性維護字串長度,常數複雜度即可獲取。預先檢查長度是否滿足需求,如果不滿足自動拓展,杜絕緩衝區溢位。空間預分配 惰性空間釋放會減少修改字串長度時所需的記憶體重分配次數。二進位制安全。相容部分 c 字串函式。list 鍊...