zoukankan      html  css  js  c++  java
  • 整数集合

    整数集合

    整数集合的升级

    升级整数集合并添加新元素的步骤:

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

    升级之后新元素的摆放位置

    因为引发升级的新元素的长度总是比整数集合现有所有元素的长度都大, 所以这个新元素的值要么就大于所有现有元素, 要么就小于所有现有元素:

    • 在新元素小于所有现有元素的情况下, 新元素会被放置在底层数组的最开头(索引 0 );
    • 在新元素大于所有现有元素的情况下, 新元素会被放置在底层数组的最末尾(索引 length-1 )。

    整数集合的降级

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

    对象

    查看对象类型type

    type test

    类型常量 对象的名称 TYPE 命令的输出
    REDIS_STRING 字符串对象 string
    REDIS_LIST 列表对象 list
    REDIS_HASH 哈希对象 hash
    REDIS_SET 集合对象 set
    REDIS_ZSET 有序集合对象 zset

    查看数据库值对象 OBJECT ENCODING key

    object encloding test

    对象所使用的底层数据结构 编码常量 OBJECT ENCODING 命令输出
    整数 REDIS_ENCODING_INT "int"
    embstr 编码的简单动态字符串(SDS)REDIS_ENCODING_EMBSTR "embstr"
    简单动态字符串 REDIS_ENCODING_RAW "raw"
    字典 REDIS_ENCODING_HT "hashtable"
    双端链表 REDIS_ENCODING_LINKEDLIST "linkedlist"
    压缩列表 REDIS_ENCODING_ZIPLIST "ziplist"
    整数集合 REDIS_ENCODING_INTSET "intset"
    跳跃表和字典 REDIS_ENCODING_SKIPLIST "skiplist"

    字符串对象

    embstr 编码的字符串对象在执行命令时, 产生的效果和 raw 编码的字符串对象执行命令时产生的效果是相同的, 但使用 embstr 编码的字符串对象来保存短字符串值有以下好处:

    • embstr 编码将创建字符串对象所需的内存分配次数从 raw 编码的两次降低为一次。
    • 释放 embstr 编码的字符串对象只需要调用一次内存释放函数, 而释放 raw 编码的字符串对象需要调用两次内存释放函数。
    • 因为 embstr 编码的字符串对象的所有数据都保存在一块连续的内存里面, 所以这种编码的字符串对象比起 raw 编码的字符串对象能够更好地利用缓存带来的优势。

    embstr 编码的字符串对象实际上是只读的: 当我们对 embstr 编码的字符串对象执行任何修改命令时, 程序会先将对象的编码从 embstr 转换成 raw , 然后再执行修改命令; 因为这个原因, embstr 编码的字符串对象在执行修改命令之后, 总会变成一个 raw 编码的字符串对象。

  • 相关阅读:
    AxureRP的学习
    http状态码的含义
    10.mongoDB给所有文档添加字段
    ip正则匹配
    express使用socketIO,前后端跨域
    express后端配置,实现跨域
    https带来的express后台部署到服务器所引发的问题
    前台:VueSocketIOExt+socket.io-client,后台socket.io的聊天环境搭载
    即时通讯框架SocketIO
    9.mongoDB新增文档,若文档已存在,则不新增,若文档不存在,则新增
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/7612024.html
Copyright © 2011-2022 走看看