Redis数据结构-整数集合
整数集合
当一个集合只包含整数值元素,并且这个集合的元素数量不多的时候,Redis就会使用整数集合张作伟集合键的底层实现
整数集合的实现
1 | typedef struct intset { |
整数集合的每个元素都是contents数组的一个数组项。各个项在数组中按值的大小从小到大有序排列,并且不重复
length记录长度
虽然contents类型为int8_t,但实际上contents的真正类型有encoding属性来决定:
- encoding为INTSET_ENC_INT16,那么contents就是一个int16_t类型的数组
- encoding为INTSET_ENC_INT32,那么contents就是一个int32_t类型的数组
- encoding为INTSET_ENC_INT64,那么contents就是一个int64_t类型的数组
升级
添加一个新元素时:
- 根据新元素类型,扩展整数集合底层数组的空间大小,并为新元素分配空间
- 将底层数据现有的所有元素都转换成与新元素相同类型,并将转换后的元素放到正确的位置上,而且在放置元素的过程中,需要继续维持底层数组的有序性质不变
- 将新元素添加到底层数组里
升级好处
- 提升灵活性
- 节约内存
降级
整数集合不支持降级,一旦进行升级,编码会一直保持
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ansore!



