美文网首页
redis-string

redis-string

作者: zhangsanzhu | 来源:发表于2018-12-30 22:30 被阅读0次

    redis-String

    String

    简单介绍

    String是像java arrayList采用的是预分配冗余空间的方式来减少内存的频繁分配,每次扩容接近翻一倍.
    String 的最大值为512m.
    特点:
    可以支持批量操作
    支持过期时间的设置
    支持自增操作(最大值为sign long超过会报错)

    批量键值对:

    set name value
    set name value
    mget name1 name2  返回一个列表
    expire name1 5  指定5s后过期
    set num  50
    incrby num 5
    

    深入String原理

    注意: 创建字符串串的时候capacity和len是一样的大写,默认不会给冗余空间,因为绝大多数场景不会使用append来修改字符串.
    结构:正常字符串为字符数组结构,但是redis是维护一个成为sds的数据结构.好处就不用遍历算字符串的长度.

    struct SDS<T> {
      T capacity; // 数组容量
      T len; // 数组长度
      byte flags; // 特殊标识位,不理睬它
      byte[] content; // 数组内容
    }
    

    存储结构 embstr 和 raw

    介绍: 长度小于44字节,则编码格式为embstr,超过44则raw.
    特点: embstr 只会进行一次内存分配(连续的内存空间),分别分配redisObjec结构和sdshdr结构表示字符串对象,而raw是两次
    注意: 边界有改变,3.0及以前版本是以39字节为界限的,3.2版本以后则为44字节为界限;2.8版本不会REIDS_ENCODING_EMBSTR_SIZE_LIMIT比较,而是直接创建raw.
    具体分析: https://blog.csdn.net/XiyouLinux_Kangyijie/article/details/78045385
    官方文档:http://redisbook.com/preview/object/string.html
    老钱:https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5b5af9d96fb9a04f83465ada
    扩容:
    小于1m加倍扩容,大于1m则只扩容1m.

    相关文章

      网友评论

          本文标题:redis-string

          本文链接:https://www.haomeiwen.com/subject/chqulqtx.html