Redis数据结构--SDS动态字符串

发布时间 2023-06-10 21:29:47作者: 99号的格调

Redis中保存的key是字符串,value往往是字符串或者字符串的集合,但是redis并没有直接使用c语言中的字符串

原因在于:

  1.获取字符串长度需要通过运算

  2.非二进制安全

  3.不可修改

SDS

struct sdshdr{
    //记录buf数组中使用字节的数量
    //等于SDS所保存字符串的长度          
    int len;    
    //记录buf数组中未使用字节的数量
    int free;
    //字节数组,用于保存字符串
    char buf[];      
}

SDS之所以叫动态字符串,是因为其具备自动扩容的能力

  如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1

  如果新字符串大于1M,则新空间为扩展后的字符串长度+1M+1

优点:

  1.获取字符串长度的时间复杂度为O(1)

  2.支持动态扩容

  3.减少内存分配次数

  4.二进制安全