一、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设计与实现》
不积跬步,无以至千里;不积小流,无以成江海!
本文深入探讨了Redis中的简单动态字符串(SDS)。SDS是Redis的默认字符串表示,相较于C字符串,它提供了常数时间的字符串长度获取、防止缓冲区溢出、减少内存重分配等优势。文章详细解释了SDS的定义、用途及与C字符串的区别。
&spm=1001.2101.3001.5002&articleId=107866126&d=1&t=3&u=8610e09caca0432e824645d676b65cb9)
3176

被折叠的 条评论
为什么被折叠?



