zoukankan      html  css  js  c++  java
  • Redis(三)节省内部空间优化

    总体原则:key的名称不易过长,剩下的所有 能用纯数字表示的尽量用

    Redis的每一个键值都是用一个redisObject结构体表示的
    结构体中有:
        键值的类型(string/list/hash/set/zset)
        内部编码方式(下面重点讲)
        该键值被多少次引用
        内容指针

    若内容指针指的是字符串,则内容指针指向sdshdr的结构体
        (该结构体中 字符串长度、buf中剩余空间、buf字符数组[存字符串])
    存储键值空间 = redisObject大小 + sdshfr大小 + 字符串大小

    若内容指针指的是数字,则内容指针直接就是数字
    存储键值空间 = redisObject大小
     
    redis内部预先存有键值为0~9999的数字键值

    字符串(编码方式RAW、INT):
    RAW redisObject内容指针指“纯字符串”
    INT redisObject内容指针指“数字”

    散列表(两种编码方式 HT ZIPLIST)
    配置文件 hash-max-ziplist-entries 512
             hash-max-ziplist-value 64
    当键值的字段个数小于第一个值且字段名、字段值的字节数小于第二个值时用ZIPLIST
    ZIPLIST:牺牲“读性能”(O(n))换取极高的“空间利用率”,适合表在较小时使用
    HT:字段名和字段值 都是 redisObject ;读性能为O(1)

    列表(编码方式 LinkedList ziplist)
    ziplist:同上
    LinkedList:每个节点都是redisObject的双向列表

    集合(编码方式 HT INTSET)
    INTSET:集合中全是数字,且数字的个数小于指定值时使用
                每个数字占位可变的动态数组
    HT:字段值为nil,在集合缩小时,不会倒退到INSET

    有序集合(编码方式 SkipList ziplist)
    ziplist:同上
    SkipList:(由散列表和跳跃表组成)
            散列表存储元素、分数映射
            跳跃表  排序
           

  • 相关阅读:
    文本框只能输入数字
    Excel 文件读取
    C# 时间格式
    window 锁屏
    窗体程序 (控件随窗体变化而变化)
    dataGridView操作数据(增加 读取 绑定 获取选择的单元格 选中整行单元格时颜色变换 更新数据 锁定列的位置 添加行 列头的方法)
    集合
    登录窗体关闭 show() showDialog()
    查询字符串中字母出现的个数
    pytorch F.cross_entropy(x,y)理解
  • 原文地址:https://www.cnblogs.com/ironPhoenix/p/4502881.html
Copyright © 2011-2022 走看看