简单动态字符串(SDS)
在Redis里面,C字符串只会作字符串字面量用在一些无须对字符串值进行修改的地方,比如打印日志
每个sds.h/sdshdr结构表示一个SDS值:
struct sdshdr {
int len;
int free;
char buf[];
};
- SDS遵循C字符串结尾的惯例,保存空字符的1字节空间不计算在len里面
SDS与C字符串的区别
- O(1)复杂度获取字符串长度
- 杜绝缓冲区溢出
当空间不够时会自动扩展
3.减少修改字符串时带来的内存重分配次数
空间预分配
惰性空间释放 - 二进制安全:可以保存文本和二进制数据
- 兼容部分C字符串函数: