1. 程式人生 > >《Redis 設計與實現》第二版讀書筆記之整數集合

《Redis 設計與實現》第二版讀書筆記之整數集合

簡介

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

實現

整數集合是Redis用於儲存整數值的集合抽象資料結構,它可以儲存型別為int16_tint32_tint64_t的整數值,並且保證集合中不會出現重複元素。
intset.h/intset

typedef struct intset {
    // 編碼方式
    uint32_t encoding;
    // 集合包含的元素數量
    uint32_t length;
    // 儲存元素的陣列
    int8_t contents[];
} intset;
  • contents陣列是整數集合的底層實現:整數集合的每個元素都是contents陣列的一個數組項,每個項在陣列中按值的大小從小到大有序地排列,並且陣列中不包含任何重複項
  • length屬性記錄了整數集合包含的元素數量,也即是contents陣列的長度

升級

每當我們要將一個新元素新增到整數集合裡面,並且新元素的型別比整數集合現有所有元素的型別都要長時,整數集合就需要先進行升級,然後才能將新元素新增到整數集合裡面

升級的好處

  1. 提升靈活性
  2. 節約記憶體

降級

整數集合不支援降級,升級之後就一直保持