redis 字符串底层实现方式(SDS)

1.SDS结构(保存的是二进制结构,同时结尾也是以\0空字符串结尾)
在这里插入图片描述

len属性 长度
free属性 未使用的空间
buf 字符数组
2.c 的字符串的缺点
在这里插入图片描述

a.以/0结尾,计算长度的话要遍历到\0才能计算出长度,时间复杂度是O(n)
b.空字符串问题 字符串中间存储不了空字符串
c.缓冲区溢出:缓冲区没有分配足够内存,则会内存溢出
d.内存重分配:每次增长或截短都需要内存重新分配重新计算,性能差
3.解决c字符串问题
a.SDS记录了字符串的长度len,计算长度负责度是O(1)
b.空间分配策略:如果修改增长字符串,会判断空间是否足够,不足够会自动扩展足够空间
c.空间预分配:当对SDS进行增长操作时,程序不仅会分配修改所必须得空间,还会为SDS分配d.额外的未使用空间。通过预分配策略,减少了连续执行字符串增长操作时内存重分配次数。
e.惰性空间释放:当对SDS进行截短操作时,程序并不会立即回收缩短后多出来的字节所占用的内存,而是使用free属性记录多出来的字节数,以供将来使用。如果将来要对这个SDS进行增长操作,未使用空间可能就派上用场,并且增长操作也不一定会执行内存重分配。
可以存储字符串和二进制数据, 还是以\0结束,可以调用部分的c函数库

博客:
https://www.jb51.net/article/280750.htm
https://blog.csdn.net/ymb615ymb/article/details/123370477

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值