整数集合
针对集合中存在所有元素都为整数的情况,Redis中存在整数集合(intset);
使用场景
整数集合是Redis用于保存整数值的集合,可以保存16位,32位,64位的整数值。
①:集合中只包含整数值元素
②:集合的元素数量不多
例如:
sadd numbers 1 3 5 7 9,object ending numbers //查看numbers类型
集合的实现
class intset{
//编码方式
String encoding;
//集合中元素数量
long length;
//保存元素的数组
long[] contents;
}intset;

- encoding属性的值为INTSET_ENC_INT16,表示数组中每个元素都是一个16位的整数值。
- length属性表示集合中包含五个元素
- contents数组按从小到大的顺序保存着集合中的五个元素。数组大小:16*5=80位。
升级

原数组都是16位的整数值,新增一个32位的整数值65535
①:空间重分配:根据新元素类型、集合元素数量 ,重分配数组(32 * 4 =128,需要128位)
②:数组转换重放置:将现有元素转换成与新元素相同的类型,然后放置到正确的位置,并且在放置元素过程中,要保持数组的顺序不变。(eg:上图顺序:3->2->1)
③:将新元素添加到数组中,encoding属性改为INTSET_ENC_INT32,length属性从3改为4.

降级
整数集合没有降级操作
总结
- 整数集合是集合键的底层实现之一
- 整数集合的底层实现为数组
- 整数集合的升级操作不仅提升了灵活性,也节约了内存
- 整数集合只有升级操作,没有降级操作
本文深入探讨Redis中整数集合(intset)的使用场景、内部实现及升级过程。整数集合专为存储整数值设计,支持16位、32位、64位整数,适用于元素数量不多的集合。文章解析了其底层数组结构,升级机制及其带来的灵活性和内存节省优势。
950

被折叠的 条评论
为什么被折叠?



