1. 整数集合特点
- 有序:集合中所有值按照从小到大顺序排列。
- 不重复
- 可以存储int16_t、int32_t、int64_t三种类型的整数
1. 数据结构
typedef struct intset{
unit32_t encoding;
unit32_t length;
int8_t contents[];
} intset;
-
encoding
:content数组中存储的整数类型(int16_t、int32_t、int64_t三者之一) -
length
:contents数组中元素的个数 -
contents
:整数数组
2. 升级
整数集合中可以存储int16_t、int32_t、int64_t这三种类型的整数,但在任一时刻,集合中所有元素的类型都是统一的。
如果当前集合存储的元素是int16_t类型,当需要存入一个int32_t类型的整数时,Redis会分配一片新的内存空间,将每个元素的类型提升为int32_t,再将所有元素迁移至新数组中。
这就是升级的过程。
3. 降级
一旦升级了之后,即使最大的那个元素已经删除,集合元素也是不会降级的。
4. 整数集合优点
4.1 灵活
整数集合可以通过自动升级底层数组来适应新元素,所以我们可以随意地将int16_t、int32_t、int64_t类型的整数添加到集合中,而不必担心类型错误。
4.2 节约内存
如果要用一个数组同时能够保存int16_t、int32_t、int64_t这三种类型的整数,那么只能创建一个int64_t类型的数组,而Redis整数集合可以保存三种类型的整数,只有当有需要的时候才进行升级操作,因此节约了内存。