Redis中set数据结构它是由intset或者hashtable构成的今天我们就来讲一下intset
整数集合(intset)呢, 是一个有序的存储数据的结构
它有以下优点
- 1.整数集合中, 元素按照值的大小由小到大排列;
- 2.可以保存int16_t, int32_t, int64_t类型的数据
- 3.存储数据时, 可以保证其内部不出现重复的数据
当一个set只包含整数元素, 并且元素不多的时候, Redis就可能使用intset来实现set
intset底层实现
typedef struct intset {
uint32_t encoding; // 编码类型
uint32_t length; // 元素数量
int8_t contents[]; // 元素数组
}intset;
但有一点需要注意
intset的集合升级与降级
比如一开始set存储的是int16_t类型的数据, 但是当我们添加了一个int32_t类项的数据时,就需要操作升级
- 根据新元素的类型, 扩展底层元素的空间, 并为新元素分配空间
- 将现有的元素都转为新的元素类型, 并存储在正确的空间上面
- 将新元素添加进数组内
最后集合是不支持降级的哦