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)