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)