跳至主要內容

Redis 整数集合

blacklad大约 1 分钟RedisRedisRedis 设计与实现

Redis 整数集合

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

1 实现

整数集合可以保存 int16_t、int32_t、int64_t 类型的整数值。

typedef struct inset {
    // 编码方式
    uint32_t encoding;
    
    // 集合包含的元素数量
    unit32_t length;
    
    // 保存元素的数据
    int8_t contents[];
}

contents数组中各个项按从小到大的顺序排列,并且不包含任何重复元素。

2 升级

当新添加的元素的类型比现有的类型长时,整数集合需要先进行升级。

  1. 根据新元素的类型,扩展底层数组的大小,并分配空间。
  2. 将所有元素转换成与新元素相同待类型放在对应的位置上。
  3. 将新元素添加到底层数组中。

定义升级策略既可以提升整数集合的灵活性,插入不同类型的整数,不必担心类型错误,同时也可以节约内存。

3 降级

整数集合不支持降级操作,一旦升级后就会一直保持升级后的状态。

上次编辑于:
贡献者: blacklad