简单动态字符串 SDS
除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区。
- AOF缓冲模块中的AOF缓冲区,是由SDS实现的。
- 客户端状态中的输入缓冲区,是由SDS实现的。
SDS的定义
每个sds.h/sdshdr结构表示一个SDS值:
- free属性的值为0,表示这个SDS没有分配任何未使用空间。
- len属性的值为5,表示这个SDS保存了一个五字节长的字符串。
- buf属性是一个char类型的数组
SDS与C字符串的区别
- 常数复杂度获取字符串长度
- 对于C字符串,因为不记录自身的长度信息,必须遍历整个字符串
- 对于SDS,因为SDS在len属性中记录SDS本身的长度,所以获取长度的复杂度为O(1)
-
杜绝缓冲区溢出
-
减少修改字符串时带来的内存重分配次数
-
二进制安全
-
兼容部分C字符串函数