整數集合
當集合元素全是整數並且數量不多時,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字節 第一個字節作爲標誌位