zoukankan      html  css  js  c++  java
  • 《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,按照位置转换类型至对应位置。

          - 

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

      - 优势

        - 节省内存。

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

    四:降级

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

  • 相关阅读:
    Lua的数学函数
    以KeyValue形式构建Lua Table
    查看占用网速的程序
    JSONObject以及json(转)
    Windows 7 下玩游戏不能全屏
    Windows 7 卸载 IE10
    win7无线网络共享
    打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机
    SQL 条件 判断 select case as
    MyEclipse Web项目调试
  • 原文地址:https://www.cnblogs.com/25-lH/p/12647344.html
Copyright © 2011-2022 走看看