- sds概念:redis没有直接使用C语言传统的字符串表示(以字符串结尾的字符数组),而是自己构建的简单动态字符串(simple dynamic string)的抽象类型。(逼逼两句:譬如字符串类型的键是一个字符串对象,对象的底层是一个保存了字符串的sds)
- sds 结构体
struct sdshdr {
// 记录buf数组中已使用字节的数量,等于sds所保存字符串的长度
int len;
// 记录buf数组中未使用字节的数量
int free;
// 字节数组,用于保存字符串
char buf[];
}
- 常数复杂度获取字符串长度(sds在len属性中记录了sds本身的长度,所以获取一个sds长度的复杂度仅为O(1))
- 杜绝缓冲区溢出
- 空间预分配(如果对sds进行修改后,sds的长度(也即是len属性的值)将小于1MB,那么程序分配和len属性同样大小的未使用空间,这时sds len属性的值将和free属性值相同。如果修改后,sds len将变成30MB,那么程序会分配1MB的未使用空间。)
- 惰性空间释放
- 二进制安全
- 兼容部分C字符串函数
网友评论