整数集合简介

整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。

整数集合(intset)中可以保存int16_tint32_tint64_t类型的整数,而且保证整数集合中元素不会重复。

整数集合的结构

整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。

  • 编码方式(encoding)表示当前整数集合的编码方式,可以设置为:INTSET_ENC_INT16INTSET_ENC_INT32INTSET_ENC_INT64
  • 元素数量(length)表示当前整数集合的包含元素的数量,也就是保存元素的数组的长度。
  • 元素数组(contents)保存了当前整数集合的所有元素,每一个元素都是数组的一个数组项,元素按照从小到大在数组中排列,并且没有重复的元素。

当编码方式为INTSET_ENC_INT16的时候,元素数组就是一个int16_t类型的数组,数组中的每个项都是int16_t类型的整数(最小值为$-2^{15}$ = -32,768,最大值为$2^{15} - 1$ = 32,767)。

当编码方式为INTSET_ENC_INT32的时候,元素数组就是一个int32_t类型的数组,数组中的每个项都是int32_t类型的整数(最小值为$-2^{31}$ = -2,147,483,648,最大值为$2^{31} - 1$ = 2,147,483,647)。

当编码方式为INTSET_ENC_INT64的时候,元素数组就是一个int64_t类型的数组,数组中的每个项都是int64_t类型的整数(最小值为$-2^{63}$ = -9,223,372,036,854,775,808,最大值为$2^{63} - 1$ = 9,223,372,036,854,775,807)。

整数集合的升级

向整数集合添加元素的时候,如果新元素的类型比这个整数集合的编码方式还长,那么整数集合就是先进行升级,然后再把新元素添加进去。

升级的操作包括:

  • INTSET_ENC_INT16升级到INTSET_ENC_INT32
  • INTSET_ENC_INT16升级到INTSET_ENC_INT64
  • INTSET_ENC_INT32升级到INTSET_ENC_INT64

升级过程总共分为3步:

  1. 根据新元素的数据类型,增大元素数组的内存空间,同时为新元素也分配好空间。
  2. 把现有的元素都转换为新元素的数据类型,并按照从小到大的顺序放到正确的位上。
  3. 把新元素放到元素数组的最后一个位置上。

另外,整数集合是不支持降级操作的。即使元素被删除后,整数集合符合较短的编码方式,也不会有降级操作。

总结

整数集合(intset)是Redis集合数据类型的内部编码之一,可以保存int16_tint32_tint64_t类型的整数。

整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。

新增的元素的类型比整数集合的编码方式还长时,该整数集合会有升级操作。整数集合不支持降级操作。

最后,谢谢你这么帅,还给我点赞关注

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

最新文章

  1. 【原】AFNetworking源码阅读(三)
  2. 【转】 jquery遍历json数组方法
  3. 解除svn版本控制
  4. Oracle 身份证校验
  5. mongodb(map-reduce)
  6. 关于SQL递归查询在不同数据库中的实现方法
  7. 深入理解javascript---命名函数表达式
  8. PKI系统深入介绍
  9. MongoDB学习笔记三:查询
  10. namke 命令行编译
  11. Codeforces 650A Watchmen
  12. Android 中类似ModelWindow的一个实现
  13. 主键、外键、超键、候选键的区别【Written By KillerLegend】
  14. spring 占位符 默认值
  15. BPMN 2.0规范
  16. SVN上传代码时代码失败
  17. ajax异步服务器获取时间
  18. object-c编程tips-timer
  19. Jetson Nano Developer Kit
  20. Vue中的template标签的使用和在template标签上使用v-for

热门文章

  1. JAVA多线程学习十一-线程锁技术
  2. js 实现光标控制与字符串查找
  3. JTAG 标准IEEE STD 1149.1-2013学习笔记(一·)Test logic architecture、Instruction register以及Test data registers
  4. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”
  5. Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治
  6. IDEA 2021 没有Allow parallel run
  7. suse 12安装 python-pip
  8. Spring AOP应用之一:声明式事务
  9. 封装及其作用Java
  10. SpringBoot 配置Druid数据库连接池