Redis之intset(整数集合)

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类项的数据时,就需要操作升级

  1. 根据新元素的类型, 扩展底层元素的空间, 并为新元素分配空间
  2. 将现有的元素都转为新的元素类型, 并存储在正确的空间上面
  3. 将新元素添加进数组内
    最后集合是不支持降级的哦

猜你喜欢

转载自blog.csdn.net/m0_53804791/article/details/121294227