整数集合是集合键的底层实现之一。
1. 整数集合的实现
Redis用于保存整数值的集合抽象数据结构,可以保存类型为int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。
每个intset.h/intset结构表示一个整数集合
typedef struct intset {
// 保存元素所使用的类型的长度
uint32_t encoding;
// 元素个数
uint32_t length;
// 保存元素的数组
int8_t contents[];
} intset;
虽然intset 结构将contents属性声明为int8_t类型的数组,但实际上contents数组并不保存任何int8_t类型的值,contents数组的真正类型取决于encoding属性的值:
- 如果 encoding属性的值为INTSET_ENC_INT16,那么contents就是一个int16_t类型的数组,数组里的每个项都是一个int16_t类型的整数值
- 如果encoding属性的值为INTSET_ENC_INT32, 那么contents就是一个int32_t类型的数组,数组里的每个项都是一个int32_t类型的整数值
- 。。。
2. 升级
新元素的长度过长
3.升级的好处
一个是提升整数集合的灵活性,另一个是尽可能的节约内存。
4. 降级
整数集合不支持降级操作,一旦对数组进行了升级,编码就会一直保持升级后的状态
5.整数集合API
intsetNew
intsetAdd
intsetRemove
insetFind
intsetRandom
intsetGet
intsetLen
intsetBlobLen 返回整数集合占用的内存字节数