首页 > 其他分享 >IntSet-整数集

IntSet-整数集

时间:2022-11-22 11:33:26浏览次数:39  
标签:encoding IntSet 整数 数组 集合 contents

IntSet 是集合类型的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis 就会使用 IntSet作为集合键的底层实现

InSet 结构

typedef struct intset {
    uint32_t encoding;
    uint32_t length;
    int8_t contents[];
} intset;
  • encoding 表示编码方式,取值有三个:INTSET_ENC_INT16, INTSET_ENC_INT32, INTSET_ENC_INT64
  • length 表示存储的整数个数
  • contents 指向实际存储数值的连续内存区域,就是一个数组;整数集合的每个元素都是contents数组的一个数组项,各个项在数组中按值的大小从小到大有序排序,并且数组不包含任何重复项。(虽然contents 项声明为int8_t类型的数组,但实际保存值的类型取决于encoding)

整数集合的升级

当一个int16类型的整数集合中插入一个int32类型的值,整个整数集合的所有元素都会转成int32类型。过程有三步:

  • 根据新的类型,扩展整数集合底层数组的空间大小,并为新元素分配空间
  • 将底层数组现有的所有元素都转换成与新元素相同的类型,并将类型转换后的元素放置在正确的位上,放置过程中保持数组的有序性质不变
  • 最后改变encoding的值,length + 1

标签:encoding,IntSet,整数,数组,集合,contents
From: https://www.cnblogs.com/youj/p/16914609.html

相关文章