首先我们先介绍一下,什么是SDS。
sds.h/sdshdr
struct sdshdr {
// 记录buf数组中已使用的字节长度
unsigned int len;
// 记录buf数组中未使用的字节长度
unsigned int free;
// java中的char占2个字节(Unicode表示);C语言中占1个字节(ASCII表示),由于汉字是2个字节,所以无法保存
char buf[];
};
【说明】最后一位遵循C字符串的空字符('\0')结尾的规则,目的是,可以直接使用C字符串的函数。其中len计数不包含‘\0’。
【为什么Redis使用SDS而不是C字符串】
【空间预分配】
【惰性空间释放】