Redis 整数集合
- 概述
- 整数集合intset是集合键的底层实现之一,当一个集合只包含数值元素且数量不多时就会使用其作为集合键的底层实现
- 用于保存int16_t,int32_t,int64_t,不会重复
- 数据结构
- encoding 编码方式
- length 元素数量
- contents[] 保存元素的数组,数组保存的类型取决于encoding属性,从小到大顺序排列
- 升级
- 当要向整数集合添加新的元素且长度比现有元素的长度都要长的时候,intset需要先进行升级,再添加到intset中。
- 1.根据新元素的类型,扩展intset底层数组的空间大小并为新元素分配空间
- 2.所有元素的类型转换成相同的,维持有序性不变
- 3.将新元素添加到数组中
- 4.改变encoding与length属性
- 升级的好处
- 提升整数集合的整体灵活性
- 不必担心出现类型错误
- 尽可能节约内存
- 按需分配
- 提升整数集合的整体灵活性
- 降级
- 整数集合不支持降级,一旦升级将保持升级后的状态
- 参考
- 《Redis设计与实现》