简单动态字符串-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字符串函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值