面试官:了解
redis
的String
数据结构底层实现嘛?铁子:当然知道,是基于
SDS
实现的面试官:
redis
是用C
语言开发的,那为啥不直接用C
的字符串,还单独设计SDS
这样的结构呢?铁子:·····
我们知道redis
是用C
写的,但它却没有完全直接使用C
的字符串,而是自己又重新构建了一个叫简单动态字符串SDS
(simple dynamic string)的抽象类型。
redis
也支持使用C
语言的传统字符串,只不过会用在一些不需要对字符串修改的地方,比如静态的字符输出。
而我们开发中使用redis
,往往会经常性的修改字符串的值,这个时候就会用SDS
来表示字符串的值了。有一点值得注意:在redis数据库中,key-value
键值对含有字符串值的,都是由SDS
来实现的。
比如:在redis
执行一个最简单的set
命令,这时redis
会新建一个键值对。
127.0.0.1:6379> set xiaofu "程序员内点事"
此时键值对的key
和value
都是一个字符串对象,而对象的底层实现分别是两个保存着字符串xiaofu
和程序员内点事
的SDS
结构。
再比如:我向一个列表中压入数据,