Redis 底層資料結構之整數集合
阿新 • • 發佈:2021-07-08
整數集合時集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個集合數量不多時,就會使用整數集合
文章參考:《Redis 設計與實現》黃建巨集
整數集合
整數集合時集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個集合數量不多時,就會使用整數集合
typedef struct intset {
// 編碼方式
uint32_t encoding;
// 集合包含的元素數量
uint32_t length;
// 儲存元素的陣列
int8_t contents[];
} intset;
-
Contents 陣列是整數集合的底層實現;每個項在陣列中從小到大有序的排列,並且不包含重複項
-
length 記錄了整數集合包含的元素數量
-
雖然 contents 宣告為 int8_t 型別,但實際上 contents陣列真正型別取決於 encoding 的值,可以為 int16_t、int32_t、int64_t
如果原先 content 數組裡存放的是 int32_t 型別的整數,要新增一個 int64_t 的整數時,整個陣列會進行升級
1. 先擴充套件整數集合底層陣列空間大小,併為新元素分配空間 2. 將底層陣列現有的元素都轉換成新元素相同的型別,並將轉換後的元素按有序性存放到新的底層陣列空間 3. 將新元素新增到底層陣列中
整數集合不支援降級