美文网首页
Redis笔记之字符串对象

Redis笔记之字符串对象

作者: slxixiha | 来源:发表于2021-08-24 22:52 被阅读0次

    字符串对象的编码可以是int、embstr或者raw。

    对象中不同类型的适用条件:
    • OBJ_ENCODING_INT:字符串保存的内容是整数,而且这个整数可以用一个long型来表示;
    • OBJ_ENCODING_EMBSTR:字符串保存的内容是长度小于等于44(老版是39)字节的字符串,或者长度符合前面条件并且能用long double表示的浮点数;
    • OBJ_ENCODING_RAW:字符串保存的内容是长度大于44(老版是39)字节的字符串;

    注:embstr与raw的区别在于把redisObject和sdshdr两块内存一次性合并申请,减少了内存的申请和释放操作次数,同时又利用上了空间局部性。

    对象类型的结构图
    • int编码类型

      int类型.PNG
    • embstr编码类型

      embstr类型.PNG
    • raw编码类型

      raw类型.PNG
    对象类型的转换:

    从一般来说都是沿着以下方向转换,也可以逆方向来优化

    int <--> embstr <--> raw

    但是embstr并未提供扩容操作,所以embstr一旦转换不管长度是多少,都会变成raw类型

    127.0.0.1:6379> set pi 3.14
    OK
    127.0.0.1:6379> object encoding pi
    "embstr"
    127.0.0.1:6379> append pi "15"
    (integer) 6
    127.0.0.1:6379> get pi
    "3.1415"
    127.0.0.1:6379> object encoding pi
    "raw"
    

    相关文章

      网友评论

          本文标题:Redis笔记之字符串对象

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