黄页88网站推广怎么样,百度竞价代运营,成都企业展厅设计公司,铜陵网站建设维护定义
整数集合是集合的实现方式之一#xff0c;当一个集合只包含整数值元素时#xff0c;并且这个集合的元素数量不多时#xff0c;Redis就会使用整数集合作为集合的底层实现。 整数集合就是存放整数的一个数组#xff0c;整数集合的结构体定义#xff1a;
typeof struc…定义
整数集合是集合的实现方式之一当一个集合只包含整数值元素时并且这个集合的元素数量不多时Redis就会使用整数集合作为集合的底层实现。 整数集合就是存放整数的一个数组整数集合的结构体定义
typeof struct intset {// 编码方式uint32_t encoding;// 集合元素数量unint32_t length;// 保存元素的数组int8_t contents[];
} intset; contents数组保存的就是整数元素这些元素从小到大排列并且不会有重复项。
我们知道对于int类型存在多种编码格式我们最常见的int的编码是32位的除此之外还有16位、64位等格式。结构体中的encoding属性用来表示当前整数的编码格式。 Redis的整数集合是支持所有的整数类型的不管是16位还是32位。 常见的int类型的编码:
int16,用16位表示一个整型数字范围是 -32768~~32767int32用32比特位表示一个整数也是最常见的范围是-2147483648~2147483647int64用32比特位表示一个整数在常见的编程语言中一般命名为long类型范围是-2^63 ~~ 2^63-1
升级
每当我们将一个新的元素添加到集合中时并且新元素的类型比整数集合现有的所有元素的类型都要长时整数集合就会进行升级 举个例子当整数集合中的元素 都是32位编码时此时向整数集合中添加一个64位的整数此时就会发生元素类型的升级首先将所有的元素的类型升级到64位然后将新元素放下。 具体的过程是这三步
根据新元素类型扩展整数集合底层数组的空间大小。将底层数组现有的所有元素转换为与新元素相同的类型并将类型转换后的元素放到扩容后的数组中的正确位置上同时维持元素的相对顺序不变。旧元素迁移完成后将新元素添加到数组的合适位置。
整数集合升级机制的优点
提升灵活性不论是何种格式下的整数都能放入不必担心类型异常。节约内存当一个数组既需要保存int16_t又需要保存int32_t时不需要一开始直接就申请int32_t的空间而是在int32_t的元素未放入前一直保持int16_t的空间当int32_t放入时才会对数组进行升级。
整数集合是只存在升级操作不存在降级操作一旦对数组进行了升级编码就会一直保持升级后的状态