Redis 底层数据结构之整数集合

文章参考:《Redis 设计与实现》黄建宏

整数集合

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

typedef struct intset {
  // 编码方式
  uint32_t encoding;
  // 集合包含的元素数量
  uint32_t length;
  // 保存元素的数组
  int8_t contents[];
} intset;
  • Contents 数组是整数集合的底层实现;每个项在数组中从小到大有序的排列,并且不包含重复项

  • length 记录了整数集合包含的元素数量

  • 虽然 contents 声明为 int8_t 类型,但实际上 contents数组真正类型取决于 encoding 的值,可以为 int16_t、int32_t、int64_t

    如果原先 content 数组里存放的是 int32_t 类型的整数,要添加一个 int64_t 的整数时,整个数组会进行升级

    1. 先扩展整数集合底层数组空间大小,并为新元素分配空间
    2. 将底层数组现有的元素都转换成新元素相同的类型,并将转换后的元素按有序性存放到新的底层数组空间
    3. 将新元素添加到底层数组中
    

    整数集合不支持降级

posted @ 2021-07-08 13:57  邱佳飞  阅读(56)  评论(0)    收藏  举报