Redis | 简单动态字符串(simple dynamic string)-SDS

Redis采用SDS(Simple Dynamic String)而非C字符串作为默认字符串表示,因为SDS具备常数复杂度获取长度、防止缓冲区溢出、减少内存重分配次数等优势。SDS使用额外的len属性记录字符串长度,实现空间预分配和惰性空间释放策略,且支持二进制安全性,同时兼容部分C字符串函数。SDS在Redis中广泛应用于保存字符串值、作为缓冲区等场景。
摘要由CSDN通过智能技术生成

目录

一、引言

二、SDS的定义

三、为什么SDS比C字符串更适合于Redis

(1)常数复杂度获取字符串长度

(2)杜绝缓冲区溢出

(3)减少修改字符串时带来的内存重分配次数

1.空间预分配

2.惰性空间释放

(4)二进制安全

(5)兼容部分C字符串函数

四、SDS的用处

五、总结


一、引言

Reds没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串( simple dynamic string,SDS)的抽象类型,并将SDS用作 Redis的默认字符串表示。

在 Redis里面,C字符串只会作为字符串字面量( string literal)用在一些无须对字符串值进行修改的地方,比如打印日志。

下面我们说明SDS和C字符串的不同之处,解释为什么Redis要使用SDS而不是C字符串。

二、SDS的定义

struct sdshdr{
    int len;//记录buf数组中已使用字节的数量
    int free;//记录buf数组中为使用字节的数量
    char buf[];//字节数组,用于保存字符串
};

示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值