开发者社区> jackrabb1t> 正文

redis数据结构实现--整数集合(intset)

简介: redis数据结构实现(五) 4.1 整数集合的实现 整数集合是集合键的底层实现之一,当一个集合键只包含整数元素,且元素不多时,Redis会采用整数集合作为集合键的底层实现。 可以保存int16_t,int32_t, int64_t类型的整数值。
+关注继续查看

redis数据结构实现--整数集合(intset)

整数集合是集合键的底层实现之一,当一个集合键只包含整数元素,且元素不多时,Redis会采用整数集合作为集合键的底层实现。

可以保存int16_t,int32_t, int64_t类型的整数值。集合中不会出现重复元素


5.1 整数集合的实现

inset结构:

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

contents数组就是整数数组的底层实现,各个元素在数组中按数组大小排序,且不可重复

虽然contents数组类型是int8_t,但是数组不存储任何int8_t类型的元素,contents数组真正的类型取决于encoding的值


5.2 升级(upgrade)

当我们添加一个新元素到整数集合中,并且新元素的类型比整数集合中的所有元素类型都要长,那么整数集合需要先进行升级,才能添加此新元素。

添加新元素并升级步骤:

1. 根据新元素类型,拓展整数集合底层数组空间大小,并为新元素分配空间
2. 将底层数组已有元素全部转化成新元素相同类型,并放置到正确的位上,此过程要保持有序性不变
3. 添加新元素
4. 修改encoding

引发升级的新元素长度肯定大于数组内已存的所有元素,所以这个新元素的值要么大于所有现有元素,要么小于所有现有元素。
大于所有元素则插入在数组尾,小于所有元素则插入在数组头

升级的好处

  • 升级带来更好的灵活性:整数集合自适应各种不同类型;
  • 升级能够节省内存:确保扩展内存只在有需要的时候进行

5.3 降级

整数集合不支持降级操作,一旦数组类型升级,编码一直保持升级后的状态。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
用于能量分解(Energy Disaggregation)研究的REDD数据集
REDD的全称为 The Reference Energy Disaggregation Data Set, 目前的版本是Version 1.0目前版本的下载地址为: http://redd.csail.
2614 0
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
295 0
intellij idea搭建ssh开发框架之绑定数据源
原文: intellij idea搭建ssh开发框架之绑定数据源 在intellij idea中绑定数据源并生成hibernate实体对象。
1515 0
Redis + Jedis + Spring整合遇到的异常(转)
项目中需要用到缓存,经过比较后,选择了redis,客户端使用jedis连接,也使用到了spring提供的spring-data-redis。配置正确后启动tomcat,发现如下异常: Caused by: org.
1602 0
redis数据结构实现--压缩列表(ziplist)
redis数据结构实现(六) 压缩列表(ziplist)是链表键和哈希键的底层实现之一。当链表键或哈希键只有少量列表项,且列表项中是小整数值或短字符串,则会采用压缩列表作为底层实现。 6.1 压缩列表的实现 压缩列表是为了节约内存而开发的,由一系列特殊编码的连续内存块组成的顺序型数据结构。
2115 0
华为架构师整理Redis数据结构的大厂最佳实践(上)
华为架构师整理Redis数据结构的大厂最佳实践
161 0
+关注
jackrabb1t
大四实习生
7
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载