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类项的数据时,就需要操作升级
- 根据新元素的类型, 扩展底层元素的空间, 并为新元素分配空间
- 将现有的元素都转为新的元素类型, 并存储在正确的空间上面
- 将新元素添加进数组内
最后集合是不支持降级的哦
Redis中的set数据结构在仅包含整数且元素不多时可能会使用intset实现。intset是一个有序的整数集合,它可以存储int16_t、int32_t、int64_t类型的数据,并确保内部数据不重复。当添加的新元素类型大于现有元素类型时,intset会进行升级操作,但不支持降级。升级过程中,intset会扩展空间,转换元素类型并将新元素添加进去。
1077

被折叠的 条评论
为什么被折叠?



