Redis原始碼分析(四)——Redis資料結構-整數集合
阿新 • • 發佈:2022-05-03
1. 整數集合特點
- 有序:集合中所有值按照從小到大順序排列。
- 不重複
- 可以儲存int16_t、int32_t、int64_t三種類型的整數
1. 資料結構
typedef struct intset{
unit32_t encoding;
unit32_t length;
int8_t contents[];
} intset;
-
encoding
:content陣列中儲存的整數型別(int16_t、int32_t、int64_t三者之一) -
length
:contents陣列中元素的個數 -
contents
:整數陣列
2. 升級
整數集合中可以儲存int16_t、int32_t、int64_t這三種類型的整數,但在任一時刻,集合中所有元素的型別都是統一的。 如果當前集合儲存的元素是int16_t型別,當需要存入一個int32_t型別的整數時,Redis會分配一片新的記憶體空間,將每個元素的型別提升為int32_t,再將所有元素遷移至新陣列中。 這就是升級的過程。
3. 降級
一旦升級了之後,即使最大的那個元素已經刪除,集合元素也是不會降級的。
4. 整數集合優點
4.1 靈活
整數集合可以通過自動升級底層陣列來適應新元素,所以我們可以隨意地將int16_t、int32_t、int64_t型別的整數新增到集合中,而不必擔心型別錯誤。
4.2 節約記憶體
如果要用一個數組同時能夠儲存int16_t、int32_t、int64_t這三種類型的整數,那麼只能建立一個int64_t型別的陣列,而Redis整數集合可以儲存三種類型的整數,只有當有需要的時候才進行升級操作,因此節約了記憶體。