Redis之intset(整数集合)

Redis中的set数据结构在仅包含整数且元素不多时可能会使用intset实现。intset是一个有序的整数集合,它可以存储int16_t、int32_t、int64_t类型的数据,并确保内部数据不重复。当添加的新元素类型大于现有元素类型时,intset会进行升级操作,但不支持降级。升级过程中,intset会扩展空间,转换元素类型并将新元素添加进去。
摘要由CSDN通过智能技术生成

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. 将新元素添加进数组内
    最后集合是不支持降级的哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gopher333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值