[Redis]Intset
intset 小整数集合#
set 集合容纳的元素都是整数并且元素个数较少
时, Redis 会使用 intset 来存储集合元素。
intset 是紧凑的数组结构,同时支持 16 位、 32 位和 64 位整数
struct intset<T>
{
int32 encoding;//决定整数位宽是 16 位、 32 位还是 64
int32 length ;//元素个数
int<T> contents;//整数数组,可以是 16 位、 32 位和 64
}
5-8 所示是 intset 的内部结构示意图。老钱也不理解为什么 intset encoding字段和 length 字段使用 32 位整数存储,毕竟它们只是用来存储小整数的,长度不应该很长,而且 encoding 只有 16 位、 32 位和 64 位三个类型,用一个字节存储就绰绰有余。关于这点,读者们可以进一步讨论。
> sadd codehole 1 2 3
(integer) 3
> debug object codehole
Value at : Ox7fec2dc2bde0 refcount:l encoding:intset serializedlength:15 lru:6065795 lru_seconds_idle:4
> sadd codehole go java python
(integer) 3
> debug object codehole
Value at:Ox7fec2dc2bde0 refcount:1 encoding:hashtable serializedlength:22 lru:6065810 lru_seconds_idle:5
注意观察 debug object 的输出字段 encoding 的值,可以发现当 set 里面放进去了非整数值时,存储形式立即从 intset 转变成了 hash 结构。
合集:
Redis
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?