redis系列

redis数据结构(四):整数集合 intset

2020-05-29  本文已影响0人  范柏柏

数据结构

整数集合是redis为了保存整数值的集合而抽象出来的数据结构。
intset数据结构

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

看这意思,也是把数组封装了一层,把length拿出来维护,方便返回数组个数。

另外两个属性就是intset的精髓了。

contents[]中的int类型,并不是int8的。而是根据encoding中定义的编码方式动态变化的。这里叫升级。

什么意思呢?

假如,刚开始定义的时候,数组中存的1,2,3。这时候元素的个数是3,编码方式是int16。现在要插入65535(int32类型),之前数组的格就大小就不够用了嘛,那就扩容呗,把之前的每个元素所占的格都扩容成int32。这样整个数组就变大了。

升级的好处是什么

注意:只能扩容,不能缩容。

上一篇 下一篇

猜你喜欢

热点阅读