SDS:simple dynamic string,简单动态字符串,在 sds.h/sdshdr文件里
并且:AOF缓冲区、客户端状态中的缓冲区,都是SDS实现的
结构如下
struct sdshdr{
int len; // 记录buf数组中已使用字节的数量
int free; // 记录buf数组中未使用字节的数量
char buf[]; // 字节数组,用于保存字符串
};
SDS的优点:
1.O(1)获取字符串长度
2.杜绝缓冲区溢出
3.减少修改字符串时带来的内存重分配次数
Redis作为数据库,经常被用于速度要求严苛、数据被频繁修改的场合
1.空间预分配
2.惰性空间释放
4.二进制安全
不仅能保存文本数据,还能保存图像、音频、视频、压缩文件
5.兼容部分C字符串函数
重用<string.h>库函数
C字符串与SDS的区别
C字符串 SDS
截取字符串长度的复杂度为O(N) 截取字符串长度的复杂度为O(1)
API是不安全的,可能会造成缓冲区溢出 API是安全的,不会造成缓冲区溢出
修改字符串长度N此必然需要执行N次内存重分配 最多需要执行N次
只能保存文本数据 可以保存文本或者二进制数据
可以使用所有<string.h>库函数 可以使用部分<string.h>库函数