redis底層數據結構之整數集合

1. 問題

當我們使用redis的set結構存儲一些數量不多的數字時,底層是什麼數據結構?

 

2. 數據結構

typedef struct intset{
    //編碼方式
    uint32_t enconding;
   // 集合包含的元素數量
    uint32_t length;
    //保存元素的數組    
    int8_t contents[];

}

說明:  encoding的取值

#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t))

 

3. 操作

添加元素: 可能會涉及到升級操作

當一個位長度更長的整數值添加到intset時,需要對Intset升級

測試: 

 

4. 注意點

1) 整數集合是有序的,支持二分查找

2) 只支持升級,不支持降級 

3) 升級操作會引起整個集合的變化,操作複雜度爲O(N)

 

發佈了206 篇原創文章 · 獲贊 104 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章