简单动态字符串:
Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符
数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串
(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认
字符串表示。
在Redis里面,C字符串只会作为字符串字面量(string literal)用在
一些无须对字符串值进行修改的地方,比如打印日志:
例如:
当Redis需要的不仅仅是一个字符串字面量,而是一个可以被修改
的字符串值时,Redis就会使用SDS来表示字符串值,比如在Redis的数据库里面,包含字符串值的键值对在底层都是由SDS实现的。
举个例子,如果客户端执行命令:
SDS定义:
下图是SDS示例:
关键介绍:
**free :**减少修改字符串长度时所需要的内存重分配次数, 可以杜绝缓冲区溢出。
**len:**常数复杂度获取字符串长度,SDS只需要使用API就可以进行字符串长度的统计。
**buf:**字节数组,可以保持任意的二进制数据-> 兼容一部分C字符串函数 (不能保存中间含有字符)