redis-原理-数据结构-整数集合(五)
什么是整数集合
集合键的底层(intset)实现之一,当一个集合只包含数值,并且数值的元素并不多时,就会选择使用整数集合作为底层实现,
本地:0>sadd number 1 2 5 6 4 本地:0>object encoding number intset
整数集合结构定义
注:虽然contens类型为int_8但是真正保存的保存的类型取决于encoding的值
如果length是4 encoding长度是int64 则整个数组占用4*64=256(size)
几种编码格式的范围
int_16 范围:-32786~32767
Int_32 范围:-2147483648~2147483647
int_64 范围:-9223372036854775808~9223372036854775807
升级
注:因为添加元素都有可能产生升级所以复杂度是0(N)
如果将一个新元素加入到集合,并且这个元素类型的长度比集合所有类型都要长时就会触发升级
比如集合包含int16的元素1,2,3,因为没有元素占16位,所以三个元素占3*16=48位空间
现在将int32位65535添加到集合,触发升级
1.首先根据新的元素类型占用长度对底层数组进行重新分配加上新的元素一共是4个元素,所需空间是4*32=128
2.因为新的元素占用的还是前48位所以要将这3个元素放到正确的位上
3.然后将新的元素放到新分配的空间上(注意整数集合是有序的,如果插入的是2 则会将原有的3后移动)
4.最后将encoding的类型改为int32
升级的好处
1.节约内存,不需要直接使用int64,而是按需升级
2.提高灵活性,因为我们一般通过声明不同类型的数组类型 比如int32 存储32位 int64存储64,通过升级无须关系多少位自动升级适配
降级
不支持降级
api
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!