Redis数据结构之整数集合-intset

当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis会使用整数集合(intset)来存储集合元素。

intset是紧凑的数组结构,同时支持16位、32位和64位整数。

结构

struct intset<T> {
    int32 encoding;    // 编码方式
    int32 length;      // 集合包含的元素数量
    int<T> contents[]; // 保存元素的整数数组
} intset;

  

  • contents数组是整数集合的底层实现,各个项在数组中按值大小升序排列,且不包含重复项

升级

在将新元素添加进整数集合时,如果新元素的类型比整数集合现有所有元素的类型都要长,整数集合需要先进行升级,扩展底层数组大小,然后再进行添加

升级策略主要有以下两个好处:

  • 提升整数集合灵活性

  • 尽可能地节约内存

注意:整数集合不支持降级操作,一旦进行了升级,编码会一直保持升级后的状态

猜你喜欢

转载自www.cnblogs.com/jeemzz/p/11443473.html