Redis中简单动态字符串SDS详解

Redis中的SDS(简单动态字符串)替代了C语言的字符串。SDS提供快速的长度获取,避免了C字符串的缓冲区溢出,并实现空间预分配和惰性空间释放优化。此外,SDS是二进制安全的,可以兼容部分C字符串函数。

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

什么是简单动态字符串?


Redis没有直接使用C语言的字符串,而是自己封装了一种字符串,叫SDS(简单动态字符串)

哪些地方使用到了SDS?
        在存储数据中,redis中键值对中键或值可以SDS,如果值是一个链表,链表中包含多个SDS,SDS类型于里面的最基本数据类型

除了存储数据,还有哪些地方使用到了SDS?
SDS还被用作缓冲区:AOF时作为AOF的缓冲区,以及客户端输入缓冲区

为什么要使用SDS,而不使用C字符串?


SDS的C源码结构是什么样的?SDS是如何实现的?
3.2之前的版本:

    sturct sdshdr{
        unsigned int len;//已使用的字符串长度
        unsigned int free;//未使用的字符串长度
        char buf[];//字符串数组的引用
    }

3.2之后的版本:根据字符串的长度,有5种结构体


     


C字符串与SDS有哪些区别?

 

 
C语言中分配N+1个字符串的空间,能存储N个字符串,空字符结尾
C语言获取一个字符串的长度,需要遍历一个字符串,时间复杂度O(n)
在SDS中直接访问len属性,就可以得到SDS的长度,时间复杂度为O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值