Redis没有直接使用C语言传统的字符串表示,而是自己构建一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示。
在Redis的数据库中,包含字符串值得键值对在底层都是又SDS实现的。
比如
reids> SET msg “hello world”
ok
在客户端中执行这样的命令,redis将在数据库中创建一个新的键值对,其中:
键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串“msg”的SDS。
键值对的值也是一个字符串对象,对象的底层实现是一个保存着字符串“hello world”的SDS。
再比如:
reids>RPUSH fruits “apple” “banana” “cherry”
(integer) 3
客户端中执行的命令,那么Redis在数据库中创建一个新的键值对,其中:
键值对的键是一个字符串对象,对象的底层实现是一个保存了字符串“fruits” 的SDS。
键值对的值是一个列表对象,列表对象包含了三个字符串对象,这三个字符串对象分别又三个SDS实现,分别又三个SDS保存着“apple” “banana” “cherry”
SDS具有以下优点:
(1)常数复杂度获取字符串长度
(2)杜绝缓冲区溢出
(3)减少修改字符串长度时所需的内存重分配次数(空间预分配,惰性空间释放)
(4)二进制安全
(5)兼容部分C字符串函数