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