整数集合是Redis用于保存整数值的集合抽象数据结构。在Redis中,当一个集合的只包含整数值元素时,并且这个集合的元素数量不多时,就会使用整数集合去作为集合键的底层实现。
例:
redis-> SADD numbers 1 3 5 7 9
(integers) 5
redis-> OBJECT ENCODING numbers
"intset"
一,整数集合的实现原理及其源码
整数集合可以保存int1_t16,int32_t,int64_t类型的整数值(在同一个集合中,只能存在同一种类型整数值,这里涉及到了升级,后面会有提及)。
每个intset.h/intset结构表示一个整数集合:
typedef struct intset{
//编码方式
uint32_t encoding;
//集合包含的元素数量
uint32_t length;
//保存元素数组
int8_t contents[];
}intset;
属性简介:
1)encoding属性:可以为INTSET_ENC_INT16,就表示contents数组中存储的是int16_t类型的数据,并且数组中的每个数据都将是int16_t类型的。同理,当为INTSET_ENC_INT32,INTSET_ENC_INT64时依次就将是int32_t类型合int64_t类型的数据。
2)length属性&#