zoukankan      html  css  js  c++  java
  • Redis--整数集合(升降级)

    整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 它可以保存类型为 int16_t 、 int32_t 或者 int64_t 的整数值, 并且保证集合中不会出现重复元素。

    每个 intset.h/intset 结构表示一个整数集合:

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

    整数集合的底层实现为数组, 这个数组以有序、无重复的方式保存集合元素, 在有需要时, 程序会根据新添加元素的类型, 改变这个数组的类型。

    升级操作为整数集合带来了操作上的灵活性, 并且尽可能地节约了内存。

    整数集合只支持升级操作, 不支持降级操作

    升级整数集合并添加新元素共分为三步进行:

    1. 根据新元素的类型, 扩展整数集合底层数组的空间大小, 并为新元素分配空间。
    2. 将底层数组现有的所有元素都转换成与新元素相同的类型, 并将类型转换后的元素放置到正确的位上, 而且在放置元素的过程中, 需要继续维持底层数组的有序性质不变。
    3. 将新元素添加到底层数组里面。

    整数集合不支持降级操作, 一旦对数组进行了升级, 编码就会一直保持升级后的状态。

  • 相关阅读:
    第十七讲:解释器模式
    第十六讲:适配器模式
    第十五讲:桥接模式
    第十四讲:组合模式
    第十三讲:外观模式
    第十二讲:代理模式
    第十一讲:享元模式
    第九讲:策略模式
    工厂模式
    观察者设计模式
  • 原文地址:https://www.cnblogs.com/sulishihupan/p/14522530.html
Copyright © 2011-2022 走看看