通常,我们说Redis 是用 C 语言写的,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空字符’\0’结尾的字符数组),它是自定义的数据结构SDS(simple dynamic string),并将 SDS 作为 Redis的默认字符串表示。
SDS 定义
struct sdshdr{
//记录buf数组中已使用字节的数量
//等于 SDS 保存字符串的长度
int len;
//记录 buf 数组中未使用字节的数量
int free;
//字节数组,用于保存字符串
char buf[];
}
用SDS保存字符串 “Redis”具体图示如下:
解释:
- len 为字符串的实际长度 在redis中获取字符串的key长度的时间复杂度为O(1)
- free 为 buf数组中剩余的空间大小(相对于 C 语言对于字符串的定义,多出了 len 属性以及 free 属性)
- buf 保存字符串的数组
- 使用free杜绝了缓冲区溢出如果free的长度不够值的长度则自动会开辟len长度的空间
参考:https://www.cnblogs.com/ysocean/p/9080942.html