Redis-整数集合

整数集合

介绍:

整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。集合的底层会对数组进行由小到大的排序

代码

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

解析

  • 其中 数组虽然是uint_8t 类型 但是具体类型还是有encoding来决定

  • encoding可选

    • INTSET_ENC_INT16 java的short

    • INTSET_ENC_INT32 java的int

    • INTSET_ENC_INT64 java的long

  • length 为数组中元素的数量

升级

  • 升级是将数组类型进行升级如价将 short类型数组升级为 int或long类型
升级过程

如有一个数组类型为encoding = INTSET_ENC_INT16 其中包括3个数字分别为1 ,2 ,3 现添加一个int类型数字

  1. 首先要知道这个数组占多少内存 16×3 = 48bit 扩容为int 所占内存为 32×4 = 128bit

  2. 先将数组扩容为128bit 之后将新插入放入最后 在将1,2,3 排序后放入扩容到数组中 使得每个数组占中32bit

  3. 每次升级都需要将数组中的元素进行类型转换 所以升级的时间复杂度为O(n)

升级的好处
  • 升级可以提升整数集合的灵活性,和解决内存(毕竟放在内存中)

PS: 整数集合不会降级 比如说数组中有long类型 那么数组肯定是INTSET_ENC_INT64 即使删除了这个long类型数组 整数集合还是不会降级 依旧保持在INTSER_ENC_INT64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值