Reids之整数集合

来源:互联网 发布:如何评价海贼王 知乎 编辑:程序博客网 时间:2024/06/06 12:50

整数集合介绍

整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素不多时,Redis就会使用整数集合作为集合键的底层实现。
这里写图片描述

整数集合的实现

保存整数值得集合抽象数据集合,保证集合中不会出现重复元素。

typedef struct intset{    //编码方式    uint32_t encoding;    //集合包含的元素数量    uint32_t length;    //保存元素的数组    int8_t contents[];}intset;

contents内部元素是有序的排列,并不重复。
encoding属性值如果是INTSET_ENC_INT64,则表示整数集合的底层实现为int64_t类型的数组。

如果保存4个元素,contents数组大小为sizeof(int64_t)*4=64*4=256位

升级

当将一个元素添加到整数集合里,新元素类型比集合任一元素类型都要长,则要进行升级。
升级集合并添加新元素:
1.根据新元素类型,扩展数组空间大小,并为新元素分配空间
2.将底层数组所有类型转化成新元素相同的类型。将类型转化后元素放到正确位置上。
3.将新元素添加到底层数组里面

升级提高了灵活性,节约内存

降级

整数集合不支持降级操作,只保存升级后的状态,即最大类型状态。

0 0
原创粉丝点击