Redis使用SDS的原因

Redis使用SDS(Simple Dynamic String)代替C字符串,因为它提供常数复杂度获取长度、防止缓冲区溢出、减少内存重分配次数以及支持二进制安全性。SDS通过len属性实现O(1)获取长度,通过记录free空间实现空间预分配和惰性释放策略,从而提高性能和安全性。
摘要由CSDN通过智能技术生成
  • SDS定义
struct  sdsher{
//记录buf中已保存字符的长度
//等于SDS所保存的字符串的长度
int  len;
//记录buf数组中未使用字节的数量
int free;
//字节数组,用于保存字符串
char buf[];
};

说明:SDS为了能够使用部分C字符串函数,遵循了C字符串以空字符结尾的惯例,保存空字符的1字节不计算在SDSlen属性中,并且为空字符分配额外的1字节空间,以及添加空字符到字符串末尾等操作,都是由SDS函数自动完成的,可以说空字符对使用者是不可见的

  • 为什么使用SDS(simple dynamic string)
    举个简单例子:一个简单的C字符串 “Redis”
    在这里插入图片描述
    C语言使用这种简单的字符串表示方法,并不能满足Redis对字符串在安全性、效率性以及功能方面的要求。

**

1、常数复杂度获取字符串长度

**
C语言中实现字符串长度计数的复杂度为O(N)。
而反观SDS中,因为其结构中保存了len这一属性,所以获取SDS长度的复杂度仅为O(1)。
并且我们不需要手动修改len属性,设置和更新SDS长度的工作是由SDS的API在执行时自动完成的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值