第6章 整数集合

来源:互联网 发布:云计算视频学院 编辑:程序博客网 时间:2024/06/01 20:25

整数集合是集合键的底层实现之一。

1. 整数集合的实现

Redis用于保存整数值的集合抽象数据结构,可以保存类型为int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。

每个intset.h/intset结构表示一个整数集合

typedef struct intset {    // 保存元素所使用的类型的长度    uint32_t encoding;    // 元素个数    uint32_t length;        // 保存元素的数组    int8_t contents[];  } intset;


虽然intset 结构将contents属性声明为int8_t类型的数组,但实际上contents数组并不保存任何int8_t类型的值,contents数组的真正类型取决于encoding属性的值:

  • 如果 encoding属性的值为INTSET_ENC_INT16,那么contents就是一个int16_t类型的数组,数组里的每个项都是一个int16_t类型的整数值
  • 如果encoding属性的值为INTSET_ENC_INT32, 那么contents就是一个int32_t类型的数组,数组里的每个项都是一个int32_t类型的整数值
  • 。。。

2. 升级

新元素的长度过长

3.升级的好处

一个是提升整数集合的灵活性,另一个是尽可能的节约内存。

4. 降级

整数集合不支持降级操作,一旦对数组进行了升级,编码就会一直保持升级后的状态


5.整数集合API


intsetNew
intsetAdd
intsetRemove
insetFind
intsetRandom
intsetGet
intsetLen
intsetBlobLen 返回整数集合占用的内存字节数


0 0
原创粉丝点击