- 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在执行时自动完成的。