美文网首页
redis数据结构--SDS

redis数据结构--SDS

作者: MontyOak | 来源:发表于2019-04-14 21:19 被阅读0次

    redis底层存储字符串的数据结构叫做简单动态字符串(simple dynamic string)。

    SDS定义

    下面是SDS的简单定义:

    struct sdshdr {
      int len; // 记录buf已使用的字符串长度
      int free; // 记录buf未使用的字符串长度
      char buf[]; // 字节数在
    }
    

    相比于原生的C语言中的字符串,SDS具备以下优点:

    • O(1)复杂度获取字符串长度
    • 杜绝缓冲区溢出 这是记录了free之后带来的好处
    • 减少修改字符时内存重新分配的次数 因为预留了free长度的空间,关于空间分配,有以下两种策略:
      1. 空间预分配 具体分配策略是,如果SDS长度小于1MB,则分配和len相等的free,如果SDS长度大于1MB,则free=1MB。
      2. 惰性空间释放 当buf存储内容减少的时候,并不立即释放空间,而是通过增加free的值来把空间预留下来备用。
    • 二进制安全 用len记录字符真实长度,防止因为'\0'而出现的内容提前截断
    • 兼容部分C的字符串操作函数 为buf加上'\0'结尾,直接复用部分c的字符串操作函数

    相关文章

      网友评论

          本文标题:redis数据结构--SDS

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