整数集合

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

整数集合

针对集合中存在所有元素都为整数的情况,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.
在这里插入图片描述

  • 升级的好处

    • 提升灵活性,我们可以将16位、32位、64位的整数添加到集合中,不用担心类型错误
    • 节约内存

降级

整数集合没有降级操作

总结

  • 整数集合是集合键的底层实现之一
  • 整数集合的底层实现为数组
  • 整数集合的升级操作不仅提升了灵活性,也节约了内存
  • 整数集合只有升级操作,没有降级操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值