1. 程式人生 > 其它 >Redis底層結構之壓縮列表

Redis底層結構之壓縮列表

技術標籤:Redis

文章目錄

是什麼

壓縮列表是一塊連續的記憶體空間,zset、hash容器在元素物件較少的時候,採用壓縮列表。

struct ziplist<T>{
	int32 zlbytes;//整個壓縮列表佔用位元組數
	int32 zltail_offset://最後一個元素距離壓縮列表起始位置的偏移量,用於倒著遍歷
	int16 zllength://元素個數
	T[] extries://元素內容列表,連續儲存
	int8 zlend://標誌壓縮列表的結束
}

在這裡插入圖片描述

struct entry{
	int<var> prevlen;
//前一個entry的位元組長度,壓縮連結串列倒著遍歷的時候,需要通過這個元素快速定位到下一個元素 int<var> encoding;//元素型別編碼 optional byte[] content;//元素內容 }

增加元素

因為ziplist是緊湊儲存,插入一個新元素,需要realloc擴充套件記憶體,會重新分配記憶體空間,將內容進行拷貝

如果ziplist佔用記憶體太大,重新分配記憶體和拷貝記憶體機會有很大的消耗。

不適合儲存大型字串,儲存的元素也不宜過多

存在級連更新的問題

IntSet集合

當set集合元素容納的元素都是整數且元素個數較小時,Redis會採用intset來儲存結合元素。intset是緊湊的陣列結構,支援16位,32位,64位整數

struct intset<T>{
	int32 encoding://決定整數位寬是16位、32位、還是64位
	int32 length;//元素個數
	int<T>  contents;//整數陣列,可以是16位、32位、還是64位
}

在這裡插入圖片描述