近来对着文档学习一波Redis的设计与实现,一边看一边记笔记。
- SDS的定义
SDS对应的结构体sds.h/sdshdr
1
2
3
4
5
6
7
8
9>struct sdshdr{
> //记录buf数组已存入的字节数
> //sds结构体存入的字符串的长度
> int len;
> //当前sds结构体未使用的字节数(可调整)
> int free;
> char buf[];
>};
>
下图为SDS一个示例
free的属性值为0,表示当前SDS还有5个可用字节
len的属性值为5,表示当前SDS存入的字符串长度是5个字节
buf是个字符数组,前len个字节保存存入的字符,最后一个字节默认一直是保存空字符‘\0’
SDS默认保存多一个空字符,这样就能沿用C的部分字符串语法,而SDS仅仅是多用了一个字节的空间
字符串长度时间复杂度