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决定,所以可以安全的存储二进制的数据。

      

  • 相关阅读:
    递归和回溯的区别
    N皇后问题
    c输出格式
    python sublime run快捷键设置
    八皇后问题
    动态规划---从左上角到右下角的价值最大的路径
    莫队算法详解和c实现
    Shell 常用命令总结
    WeakHashMap和HashMap的区别
    【 Jquery插件】引导用户如何操作网站功能的向导
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9813104.html
Copyright © 2011-2022 走看看