redis中的字符串底层是使用自定义的SDS数据结构。
Redis是基于C语言编写,而C语言中的字符串其实就是字符数组,它除了二进制不安全外,还缺少额外信息,无法支持一些高级特性(扩容、越界判断等),于是Redis在字符数组的基础之上做了少了变更,形成了SDS结构。
Redis3.2之前的版本中SDS都是如下结构
代码语言:javascript复制struct sds {
int len; // buf中已占用字节数
int free; // buf中剩余可用字节数
char buf[]; // 数据空间
};
对比C中的字符串,SDS的有点主要有:
- 额外维护了相关的空间使用信息,可以快速获取字符串长度
- 因为维护了字符串长度,可以不使用"