sds笔记

SDS是Redis中用于字符串操作的数据结构,它维护了`free`和`len`两个字段,优化了内存管理和字符串操作。通过预留空间避免频繁扩缩容,且支持二进制安全性。当处理包含特殊字符的key或value时,Redis会使用SDS。
摘要由CSDN通过智能技术生成

结构

free // 空余空间

len //已使用空间

char buf[]  //数据 

buf[] 数组中,存放的数据会在最后以空字符结尾

free len都不计算数据中的最后一个空字符,这是redis为了使用c的一些api而保留的c的风格

记录free和len

一方面可以很快的返回len,不必每次都遍历数组长度,减少strlen这类api的时间复杂度。

其次,还可以在对字符串进行写操作时,通过判断free和len来确认扩缩容,防止内存泄漏和内存溢出。

再者,扩缩容时,会根据总大小来判断分配/回收策略,如果字符串大小大于1M则会额外分配1M+1byte,

如果字符串大小小于1M,则会分配大小*2+1byte,缩容时并不会立刻回收,而是将空闲记录到free

这样通过预留空间和惰性回收,可以防止频繁的扩缩容消耗性能。

另外,sds的buf[]保存的不是字符数组,是字节数组,因为redis是通过len来判断结尾而不是C语言使用空字符来判断,

所以这样就保证了rdis存储是二进制安全的。

当key或者value中的值有字符时,会使用sds实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值