Redis设计与实现之简单动态字符串

Redis采用SDS(Simple Dynamic String)作为默认字符串表示,而非C语言的字符数组。SDS在结构中包含len属性记录字符串长度,free属性记录未使用空间,提供常数复杂度获取长度,避免缓冲区溢出,并通过空间预分配和惰性释放策略减少内存操作。SDS是二进制安全的,允许包含空字符,方便处理各种数据类型。
摘要由CSDN通过智能技术生成

简单动态字符串

什么是 SDS

SDS ,即 Simple Dynamic String,简单动态字符串。

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

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

当 Redis 需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,Redis 就会使用 SDS 来表示字符串值,比如在 Redis 的数据库里面,包含字符串值的 键值 对在底层都是由 SDS 实现的。

SDS 的定义

在 SDS 结构中包含:

buf
len
free

举例:

  • len 属性的值等于 5,表示在 SDS 中保存了一个五字节长度的字符串
  • free 属性的值等于 0,表示在 SDS 中没有分配任何未使用的空间
  • buf 属性是一个 char 数组,前五位保存了五个字符,在最后一个字节保存了一个空字符'\0'

需要注意的是:SDS 遵循 C 字符串以空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值