大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说快速整明白Redis中的整数集合到底是个啥「建议收藏」,希望您对编程的造诣更进一步.
整数集合简介
整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。
整数集合(intset)中可以保存int16_t
、int32_t
和int64_t
类型的整数,而且保证整数集合中元素不会重复。
整数集合的结构
整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。
- 编码方式(encoding)表示当前整数集合的编码方式,可以设置为:
INTSET_ENC_INT16
、INTSET_ENC_INT32
、INTSET_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步:
- 根据新元素的数据类型,增大元素数组的内存空间,同时为新元素也分配好空间。
- 把现有的元素都转换为新元素的数据类型,并按照从小到大的顺序放到正确的位上。
- 把新元素放到元素数组的最后一个位置上。
另外,整数集合是不支持降级操作的。即使元素被删除后,整数集合符合较短的编码方式,也不会有降级操作。
总结
整数集合(intset)是Redis集合数据类型的内部编码之一,可以保存int16_t
、int32_t
和int64_t
类型的整数。
整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。
新增的元素的类型比整数集合的编码方式还长时,该整数集合会有升级操作。整数集合不支持降级操作。
最后,谢谢你这么帅,还给我点赞和关注。
微信公众号:万猫学社
微信扫描二维码
关注后回复「电子书」
获取12本Java必读技术书籍
出处:http://www.cnblogs.com/heihaozi/
版权声明:本文遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。
微信扫描二维码,关注
万猫学社,回复「
电子书」,免费获取12本Java必读技术书籍。
原文地址:https://www.cnblogs.com/heihaozi/archive/2022/03/15/16008592.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5439.html