zoukankan      html  css  js  c++  java
  • Redis-SDS

    Redis 的简单动态字符串 (simple dynamic string,SDS)

    SDS的结构:

      struct sdshdr {

        int len;  //保存的字符串长度。

        int free;  //buf数组中,未使用字节的数量。

        char buf[];  //字节数组,用于保存字符串。

      }

    区别于C语言中的字符串结构:

      1、C语言的字符串,以空字符''为结尾标识。

      2、SDS 以len为结尾标识。(每个SDS结尾都会额外的添加空字符,是为了兼容C函数。)

    这样设计的好处:

      1、获取字符串长度的时候,就不需要遍历buf数组,进行长度的统计。

      2、杜绝缓冲区溢出。

      3、减少修改字符串时带来的内存重分配次数。

        扩容的机制为:    扩容后少于1m的,长度翻倍。例如字符串长度为10,则buf的长度扩容后为21(10+10+1(空字符))。

                扩容后大于1m的,30M+1M+1byte

        惰性释放空间:不主动缩小buf的长度。

      4、二进制安全。如果存放二进制数据,空字符并不能代表字符串的结尾。但是SDS格式由于结尾表示由len决定,所以可以安全的存储二进制的数据。

      

  • 相关阅读:
    虚方法和抽象方法
    c#_实现FTP方法(一) FtpWebRequest
    sql server 分页
    5ucms进阶
    图片处理函数
    [转]C++11新特性:Lambda函数
    [STL]for_each详细用法[转]
    [算法]hash table 与 hash map 实现
    [算法]字典树
    [STL]vector的使用[转]
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9813104.html
Copyright © 2011-2022 走看看