Redis 整数集合
大约 1 分钟RedisRedisRedis 设计与实现
Redis 整数集合
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,就会用整数集作为底层实现。
1 实现
整数集合可以保存 int16_t、int32_t、int64_t
类型的整数值。
typedef struct inset {
// 编码方式
uint32_t encoding;
// 集合包含的元素数量
unit32_t length;
// 保存元素的数据
int8_t contents[];
}
contents数组中各个项按从小到大的顺序排列,并且不包含任何重复元素。
2 升级
当新添加的元素的类型比现有的类型长时,整数集合需要先进行升级。
- 根据新元素的类型,扩展底层数组的大小,并分配空间。
- 将所有元素转换成与新元素相同待类型放在对应的位置上。
- 将新元素添加到底层数组中。
定义升级策略既可以提升整数集合的灵活性,插入不同类型的整数,不必担心类型错误,同时也可以节约内存。
3 降级
整数集合不支持降级操作,一旦升级后就会一直保持升级后的状态。