当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis
会使用整数集合(intset)
来存储集合元素。
intset
是紧凑的数组结构,同时支持16
位、32
位和64
位整数。
结构
struct intset<T> { int32 encoding; // 编码方式 int32 length; // 集合包含的元素数量 int<T> contents[]; // 保存元素的整数数组 } intset;
-
contents
数组是整数集合的底层实现,各个项在数组中按值大小升序排列,且不包含重复项
升级
在将新元素添加进整数集合时,如果新元素的类型比整数集合现有所有元素的类型都要长,整数集合需要先进行升级,扩展底层数组大小,然后再进行添加
升级策略主要有以下两个好处:
-
提升整数集合灵活性
-
注意:整数集合不支持降级操作,一旦进行了升级,编码会一直保持升级后的状态