1. 程式人生 > 其它 >Redis 底層資料結構之整數集合

Redis 底層資料結構之整數集合

整數集合時集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個集合數量不多時,就會使用整數集合

文章參考:《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. 將新元素新增到底層陣列中
    

    整數集合不支援降級