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 鍊...