整数集合(intset)
-
intset是reids用于保存整数值的集合抽象数据结构,它可以保存int16_t,int32_t,int64_t整数值,并且保证集合中不出现重复元素
-
intset的实现:
-
typedef struct intset { //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[]; } intset
-
-
intset中的每一个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大排序,并且不会有重复项
-
虽然intset将contens声明为int8_t类型的数组,但contents数组不会保存任何int8_t类型的值,contents数组的真正类型决定于encoding
-
intset的升级:
-
当加入的值大于现有的encoding时,intset会去升级
-
升级步骤:
- 先拓展到足够的空间
- 再去将现有元素的类型转换一下,保证现在的顺序,从后往前放置
-
升级策略的好处:
- 提升了intdet的灵活性
- 尽可能地节约内存
-
升级后就不能降级了哦
-