【Redis】简单动态字符串

SDS定义

在这里插入图片描述

  • 这里简单说明一下:buf空间大小等于len加上free加上1个字节
  • 为什么需要加1个字节呢,因为为了SDS可以兼容调用C字符串函数

SDS比C字符串的优势

第一:字符串长度获取复杂度降低
  • 复杂度由原来的O(n) 降低成O(1)
第二:SDS杜绝缓存区的溢出
  • SDS预先检查空间是否足够,自动为其分配空间,可以看第三点的分配规则
  • C字符串需要手动为其分配空间【可能忘记了,就会导致这种情况】

第三:减少修改字符串时带来的内存重分配次数

  • 空间预分配:当len的值小于1MB时,程序会自动分配和len同样大小的未使用空间free, 也就是len==free。当len的值大于等于1MB时,程序会自动分配1MB未使用空间free, 也就是free == 1MB
  • 惰性空间释放:简单的来说的话,buf 字节数组中,存在 redis 这几个字符,len值为5 ,free值为0 时,现在我需要将redis 变成red ,那这个时候 ,len 为 3 ,free 2 。减少内存重分配次数,SDS 提供了相应的API , 对其进行空间释放。

第四:二进制安全

  • SDS 可以存储文本或者二进制数据

第五:部分兼容字符串函数

  • SDS遵循C字符串以空字符串结尾的惯例,这样可以部分使用字符串函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝颜~岁月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值