在 Redis 中,字符串都用自定义的结构简单动态字符串(Simple Dynamic Strings,SDS)。
Redis 中使用到的字符串都是用 SDS,例如 key、string 类型的值、sorted set 的 member、hash 的 field 等等等等。。。
数据结构
旧版本的结构
在 3.2
版本之前,sds 的定义是这样的:
struct sdshdr {
// buf 数组中已使用的字节数量,也就是 sds 本身的字符串长度
unsigned int len;
// buf 数组中未使用的字节数量
unsigned int free;
// 字节数组,用于保存字符串
char buf[];
};
这样的结构有几个好处:
- 单独记录长度
len
,获取字符串长度的时间复杂度是 (O(1)) 。传统的 C 字符串获取长度需要遍历字符串,直到遇到