美文网首页
Redis源码分析(四)——Redis数据结构-整数集合

Redis源码分析(四)——Redis数据结构-整数集合

作者: 大闲人柴毛毛 | 来源:发表于2017-10-14 18:49 被阅读33次

    1. 整数集合特点

    1. 有序:集合中所有值按照从小到大顺序排列。
    2. 不重复
    3. 可以存储int16_t、int32_t、int64_t三种类型的整数

    1. 数据结构

    typedef struct intset{
      unit32_t encoding;
      unit32_t length;
      int8_t contents[];
    } intset;
    
    • encoding:content数组中存储的整数类型(int16_t、int32_t、int64_t三者之一)
    • length:contents数组中元素的个数
    • contents:整数数组

    2. 升级

    整数集合中可以存储int16_t、int32_t、int64_t这三种类型的整数,但在任一时刻,集合中所有元素的类型都是统一的。
    如果当前集合存储的元素是int16_t类型,当需要存入一个int32_t类型的整数时,Redis会分配一片新的内存空间,将每个元素的类型提升为int32_t,再将所有元素迁移至新数组中。
    这就是升级的过程。

    3. 降级

    一旦升级了之后,即使最大的那个元素已经删除,集合元素也是不会降级的。

    4. 整数集合优点

    4.1 灵活

    整数集合可以通过自动升级底层数组来适应新元素,所以我们可以随意地将int16_t、int32_t、int64_t类型的整数添加到集合中,而不必担心类型错误。

    4.2 节约内存

    如果要用一个数组同时能够保存int16_t、int32_t、int64_t这三种类型的整数,那么只能创建一个int64_t类型的数组,而Redis整数集合可以保存三种类型的整数,只有当有需要的时候才进行升级操作,因此节约了内存。

    相关文章

      网友评论

          本文标题:Redis源码分析(四)——Redis数据结构-整数集合

          本文链接:https://www.haomeiwen.com/subject/tvcfuxtx.html