简单动态字符串-SDS

1、介绍:

             redis没有使用C语言本身的字符串,而使用简单动态字符串SDS(Simple Dynamic String)这种抽象类型。

 

2、实现:

struct{
    int len;
    int free;
    char[] buf[];
}

 

3、为什么要使用SDS?为什么不适用C语言本身的字符串?如何扩容?

  • 常数复杂度获取字符串长度(以空间换时间)

              因为C语言本身的字符串进行length计算的时候复杂度为O(N),SDS本身具有len属性,使用SDS后计算length的复杂度为O(1)

  • 杜绝缓冲器溢出

             SDS的API会检查SDS的空间是否满足修改的要求,不满足的话会自动扩展到所需的要求。

  • 减少修改字符串时所需的内存重分配次数(以空间换时间)

              空间预分配

              惰性空间释放

  • 二进制安全

              因为C语言的字符串使用空格结尾,不能包含空格,所以C字符串只能保存文本数据,不能保存图片、视频等数据。

              使用SDS可以使redis不仅可以保存文本数据,还可以保存二进制数据。

  • 兼容部分C字符串函数

你可能感兴趣的:(redis)