整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。
整数集合(intset)中可以保存int16_t
、int32_t
和int64_t
类型的整数,而且保证整数集合中元素不会重复。
整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。
INTSET_ENC_INT16
、INTSET_ENC_INT32
、INTSET_ENC_INT64
。当编码方式为INTSET_ENC_INT16
的时候,元素数组就是一个int16_t
类型的数组,数组中的每个项都是int16_t
类型的整数(最小值为−215-2^{15}−215 = -32,768,最大值为215−12^{15} - 1215−1 = 32,767)。
当编码方式为INTSET_ENC_INT32
的时候,元素数组就是一个int32_t
类型的数组,数组中的每个项都是int32_t
类型的整数(最小值为−231-2^{31}−231 = -2,147,483,648,最大值为231−12^{31} - 1231−1 = 2,147,483,647)。
当编码方式为INTSET_ENC_INT64
的时候,元素数组就是一个int64_t
类型的数组,数组中的每个项都是int64_t
类型的整数(最小值为−263-2^{63}−263 = -9,223,372,036,854,775,808,最大值为263−12^{63} - 1263−1 = 9,223,372,036,854,775,807)。
向整数集合添加元素的时候,如果新元素的类型比这个整数集合的编码方式还长,那么整数集合就是先进行升级,然后再把新元素添加进去。
升级的操作包括:
INTSET_ENC_INT16
升级到INTSET_ENC_INT32
。INTSET_ENC_INT16
升级到INTSET_ENC_INT64
。INTSET_ENC_INT32
升级到INTSET_ENC_INT64
。升级过程总共分为3步:
另外,整数集合是不支持降级操作的。即使元素被删除后,整数集合符合较短的编码方式,也不会有降级操作。
整数集合(intset)是Redis集合数据类型的内部编码之一,可以保存int16_t
、int32_t
和int64_t
类型的整数。
整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。
新增的元素的类型比整数集合的编码方式还长时,该整数集合会有升级操作。整数集合不支持降级操作。
最后,谢谢你这么帅,还给我点赞、推荐和关注。