Redis——简单动态字符串SDS

简单动态字符串(simple dynamic string)sds 作为redis的默认字符串。而不是直接使用C语言传统的字符串。

struct sdshdr{

int len;//记录buf数组中已使用的字节数量,等于sds保存的字符的长度

int free;//记录buf中未使用的字节数量

char buf[];//保存字符串

}

与C语言中string字符串相比,sds字符串有以下优点

1.计算length:c中不记录length,要遍历数组才能得到string的长度,时间复杂度为O(n);SDS则记录了lenth,时间复杂度则为O(1)

2.缓冲区溢出:C在字符串创建时,已经分配了指定的缓冲区内存。在修改的时候,都需要手动的判断内存大小是否允许修改后的值。如果忽视了手动判断大小,直接拼接则容易造成,缓冲区内存溢出。SDS则会在修改时,会自动判断大小,从而避免了缓冲区溢出的可能。

3.减少了内存重新分配次数。sds加入了free,采用空间预分配和惰性空间释放来优化分配次数。不想java一样,String类型,放在了常量池中。free 用来记录修改后,未使用的大小。这就是为了方便,惰性空间释放。

4.二进制安全的

5.兼容部分C的函数,尾部也保留空字符

与java中String有所区别

java 中string是final的,java中string被存放在常量池中,不能修改,因为java内存由虚拟机动态内存管理。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值