《Redis 設計與實現》第二版讀書筆記之整數集合
阿新 • • 發佈:2018-12-28
簡介
整數集合是集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個集合的元素數量不多時,Redis就會使用整數集合作為集合鍵的底層實現
實現
整數集合是Redis用於儲存整數值的集合抽象資料結構,它可以儲存型別為int16_t
、int32_t
、int64_t
的整數值,並且保證集合中不會出現重複元素。
intset.h/intset
typedef struct intset {
// 編碼方式
uint32_t encoding;
// 集合包含的元素數量
uint32_t length;
// 儲存元素的陣列
int8_t contents[];
} intset;
contents
陣列是整數集合的底層實現:整數集合的每個元素都是contents
陣列的一個數組項,每個項在陣列中按值的大小從小到大有序地排列,並且陣列中不包含任何重複項length
屬性記錄了整數集合包含的元素數量,也即是contents
陣列的長度
升級
每當我們要將一個新元素新增到整數集合裡面,並且新元素的型別比整數集合現有所有元素的型別都要長時,整數集合就需要先進行升級,然後才能將新元素新增到整數集合裡面
升級的好處
- 提升靈活性
- 節約記憶體
降級
整數集合不支援降級,升級之後就一直保持