intset
当一个集合中只包含整数,且这个集合中的元素数量不多时,redis就会使用整数集合intset作为集合的底层实现。
整数集合的实现
typedef struct intset {
uint32_t encoding;
uint32_t length;
int8_t contents[];
} intset;
- encoding:当前整数集合的编码方式
- length:集合中的元素个数
- contents:集合中元素的具体存储位置
redis整数集合有三种编码方式:
1)INTSET_ENC_INT16,那么contents数组就是一个int16_t类型的数组,数组中的每一项都是一个int16_t类型的整数,范围为-32768~32767
2)INTSET_ENC_INT32,那么contents是一个int32_t类型的数组
3)INTSET_ENC_INT64,那么contents是一个int64_t类型的数组
示意图
一个简单的示意图如下: