Redis的設計與實現-讀書筆記(二)

整數集合

當集合元素全是整數並且數量不多時,redis就會選擇整數集合作爲底層實現

整數集合的實現

typedef struct intset{
	uint32_t encoding; //編碼方式
	uint32_t length; // 集合元素數量
	int8_t contents[];根據encoding選擇類型 16,32,64位
}intset;

整數集合的升級

出現當前類型無法存儲的數字時,直接將所有元素升級

升級可以節約內存 和 提升靈活性

無法降級

壓縮列表

壓縮列表是是由連續內存塊組成的順序數據結構 ,當列表和哈希的元素內容要麼是小整數或短字符串時,ziplist就回成爲兩者的底層實現

壓縮列表的構成

zlbytes ztail allen entry1 entry2 … zlend
總內存 首尾 節點數 節點 節點2 結尾

entry的組成:
preLength encoding content

遍歷時從後往前 根據preLength來確定位置就可以了

連鎖更新

靠前的節點的preLength變大,導致後面的存儲不下,也變大, 不斷向後發生這樣的過程

因爲前一節點長度小於等於254字節時 preLength佔1字節
大於時 佔5字節 第一個字節作爲標誌位

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章