整数集合
是Redis保存整数值的集合抽象数据结构,可以保存类型为int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素
整数集合的定义
1
2
3
4
5
6
7
8typedef struct intset {
// 编码方式
uint32_t encoding;
// 集合包含的元素数量
uint32_t length;
// 保存元素的数组
int8_t contents[];
} intset;属性定义
- contents
- contents数组是整数集合的底层实现,每个item按值从小到大有序排列,而且不包含重复项
- length
- 记录整数集合的元素数量,即contents数组的长度
- encoding
- 决定了contents数组存放什么类型的item
- contents
升级
- 将一个新元素添加到整数集合,如新元素的类型比整数集合现有所有元素的类型都要长时,整数集合需要先进行升级,upgrade,然后才能将新元素添加到整数集合
- 步骤
- 根据新元素的类型,扩展数组空间,并且为新元素分配空间
- 将旧元素都转换为与新元素相同的类型,并且将旧元素放置到正确的位置上,过程中要维持有序性不变
- 将新元素添加到数组中
- 向整数集合添加新元素的时间复杂度为O(N)
- 升级的好处
- 提升灵活性
- 节约内存
降级
- 整数集合不支持降级操作,一旦进行了升级,编码就会一直保持升级后的状态