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,按照位置转换类型至对应位置。

          - 

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

      - 优势

        - 节省内存。

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

    四:降级

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

  • 相关阅读:
    iOS仿UC浏览器顶部频道滚动效果
    OC中NSClassFromString()与NSStringFromClass()的用法及应用场景
    利用工具MailUtils实现邮件的发送,遇到的大坑,高能预警!!
    使用response实现文件下载注意点
    mac版MyEclipse的安装及创建web项目
    Mac系统下安装Tomcat,以及终端出现No such file or directory的错误提示解决方案
    机器学习笔记-Python简介
    解决mscordacwks.dll不一致问题
    IIS日志如何记录X-Forwarded-For
    深入理解Redis(番外)——持久化
  • 原文地址:https://www.cnblogs.com/25-lH/p/12647344.html
Copyright © 2011-2022 走看看