《Redis设计与实现》学习笔记(一) 第二章简单动态字符串SDS
文章目录
一.SDS的定义
- sdshdr结构:
int len表示保存的字符串长度,int free表示可使用的字节数,char buf[] 表示保存的字符串
二. SDS与C语言字符串的区别
1. 常数复杂度获取字符串的长度
- C字符串不记录字符长度,所以需要遍历字符串,时间复杂度为O(N)
- SDS保存了len参数,时间复杂度直接为O(1)
2. 杜绝缓冲区溢出
- SDS会先检查空间是否满足字符串拼接的需要,如果不满足,会先
扩展SDS的空间
再进行修改
3. 减少修改字符串带来的内存重分配
- C字符串append或者trim都要修改所占的空间大小
4. 二进制安全
- Buf数组其实是保存的二进制数据
5. 兼容部分C字符串
- 也以
空字符
结尾,所以保存文本数据的SDS也可以使用C字符的API