一、SDS是什么?
Redis没有直接使用C语言传统的字符串表示( 以空字符结尾的字符数组, 以下简称C字符串) , 而是自己构建了一种名为简单动态字符串( simple dynamic string, SDS) 的抽象类型, 并将SDS用作Redis的默认字符串表示。C字符串会用在无需对字符串进行更改的地方(日志打印)
二、SDS用在什么地方?
- 存储redis数据库中的字符串值
- 用做AOF缓冲区
- 客户端状态中的缓冲区
三、SDS定义
struct sdshdr {
//
记录buf
数组中已使用字节的数量
//
等于SDS
所保存字符串的长度
int len;
//
记录buf
数组中未使用字节的数量
int free;
//
字节数组, 用于保存字符串
char buf[];
};
四、C字符串和SDS的区别
五、总结
Redis只会使用C字符串作为字面量, 在大多数情况下, Redis使用SDS( Simple Dynamic String, 简单动态字符串) 作为字符串表示。·比起C字符串, SDS具有以下优点:
- 1) 常数复杂度获取字符串长度。
- 2) 杜绝缓冲区溢出。
- 3) 减少修改字符串长度时所需的内存重分配次数。
- 4) 二进制安全。
- 5) 兼容部分C字符串函数。
参考资料:《redis设计与实现》
不积跬步,无以至千里;不积小流,无以成江海!