• 《Redis


    一:概述

      - Redis 源码版本为3.0.0.

      - 整数集合(intset) 是集合键的底层实现之一。当一个集合元素不多,并只有整数时,会使用整数集合来实现。

    二:整数集合的基础结构

      - 概述

        - 用于保存整数值集合,可以保存类型为 ini16_t、ini32_t、ini64_t 整数,并保证集合不会出现重复元素。 

      - 基本结构(src/intset.h)

        - 

        - content数组 是整数集合的底层实现,各个数组中按值大小有序排列,并且没有任何重复项。

        - length记录了数组的长度。

        - 集合的类型取决于 encoding 属性的值。而不是 contents 的类型。  

    三:升级

      - 概述

        -  当有新元素添加到整数集合,而新元素的类型比整数集合的类型还要大时,此时整数集合便需要升级。

      - 原理

        - 扩展底层数组的空间大小,并为新元素分配空间。

        - 将数组现有元素转换与新元素相同的类型。并放在正确的位置上。

        - 将新元素添加值底层数组。

      - 源码实现

        - 

       - 实例

        - 假设原数组 存在 int16_t 类型的 数据 1,2,3,共占用  3 * 16 = 48位空间

          - 

         - 当新添加的元素为 65535,则就需要升级为 int32_t 类型。

         - 需要扩展底层数组空间为 4 * 32 = 128 位。

          - 

        - 这时需要对数组现有元素进行类型转换(这里要从后往前的处理原数据,因为如果从前往后处理的话,扩展的字节数会覆盖之前的数据)。

        - 首先处理原数据 3,按照位置转换类型至对应位置。

          - 

         - 其余元素同理,最后处理新元素,完成升级

      - 优势

        - 节省内存。

        - 提升整数集合的灵活性 (保持数组内类型的一致性)

    四:降级

      -  不支持降级操作,一旦对数组升级,便会一致保持升级后状态。

  • 相关阅读:
    R--相关分布函数、统计函数的使用
    Spark Streaming
    统计与分布的相关知识
    Python--WebDriverWait+expected_conditions的一个应用
    Python+Selenium与Chrome如何进行完美结合
    Python+Selenium+Chrome 的一个案例
    python -使用Requests库完成Post表单操作
    JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4
    用JetBrains PyCharm 开发工具写一个简单python案例
    dom4j学习总结(一)
  • 原文地址:https://www.cnblogs.com/25-lH/p/12647344.html
Copyright © 2020-2023  润新知