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

本文解释了Redis为何不使用C语言原生字符串,而是自定义SDS结构,探讨了SDS的组成、优点(如高效和内存管理),以及SDS的内存重分配策略,包括空间预分配和惰性空间释放,以提高性能和数据灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试官:了解redisString数据结构底层实现嘛?

铁子:当然知道,是基于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 "程序员内点事"

此时键值对的keyvalue都是一个字符串对象,而对象的底层实现分别是两个保存着字符串xiaofu程序员内点事SDS结构。

再比如:我向一个列表中压入数据,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值