Redis 底层数据结构之整数集合
文章参考:《Redis 设计与实现》黄建宏
整数集合
整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合
typedef struct intset {
// 编码方式
uint32_t encoding;
// 集合包含的元素数量
uint32_t length;
// 保存元素的数组
int8_t contents[];
} intset;
-
Contents 数组是整数集合的底层实现;每个项在数组中从小到大有序的排列,并且不包含重复项
-
length 记录了整数集合包含的元素数量
-
虽然 contents 声明为 int8_t 类型,但实际上 contents数组真正类型取决于 encoding 的值,可以为 int16_t、int32_t、int64_t
如果原先 content 数组里存放的是 int32_t 类型的整数,要添加一个 int64_t 的整数时,整个数组会进行升级
1. 先扩展整数集合底层数组空间大小,并为新元素分配空间 2. 将底层数组现有的元素都转换成新元素相同的类型,并将转换后的元素按有序性存放到新的底层数组空间 3. 将新元素添加到底层数组中整数集合不支持降级

整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合
浙公网安备 33010602011771号