《Redis设计与实现》第六章 整数集合 读书笔记

2019-05-05  本文已影响0人  半亩房顶

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

6.1 整数集合的实现

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

contents 是整数集合的底层实现,每个元素都是contents数组的一个数组项,其中数字从小到大排列,且不包含重复项。虽然声明是int8_t,但是其真实类型是根据encoding属性的值决定的。
length 记录了整数集合包含的元素数量,也即contents数组的长度。
encoding 保存元素的类型,int16_t(INTSET_ENC_INT16)、int32_t、int64_t

6.2 升级

升级过程:

能引发升级的,要么大于所有现有元素,要么小于所有现有元素(负数),所以,新元素位置要么是最后一个要么是第一个

6.3 升级的好处

6.4 降级

整数集合不支持降级,其实应该是跟PHP hashtable不提供降级逻辑一样

6.5 整数集合API

6.6 重点回顾

重点回顾

以上


欢迎大家关注我的公众号


半亩房顶
上一篇 下一篇

猜你喜欢

热点阅读