阿里面试:redis 为什么把简单的字符串设计成 SDS?

Redis中的String数据结构采用SDS而不是C语言的字符串,因为SDS具有效率高、避免数据溢出、内存重分配策略以及支持数据多样性等优势。SDS结构包含len、free和buf属性,提供O(1)的字符串长度获取,且在字符串增长和缩短时通过空间预分配和惰性空间释放策略优化内存操作。
摘要由CSDN通过智能技术生成

面试官:了解redis的String数据结构底层实现嘛?
铁子:当然知道,是基于SDS实现的

面试官:redis是用C语言开发的,那为啥不直接用C的字符串,还单独设计SDS这样的结构呢?

铁子:·····

其实看得出面试官是想看看,铁子是只停留在redis的使用层面,还是对底层数据结构有过更深入的研究,面试嘛都爱这样问大家都懂得。

我们知道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结构。

再比如:我向一个列表中压入数据,redis 又会新建一个键值对。

127.0.0.1:6379> lpush xiaofu “程序员内点事” “程序员小富”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyufeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值