一、SDS定义
二、SDS与C字符串的区别
2.1 常数复杂度获取字符串长度
C:遍历 整个字符串,对遇到的每个字符进行计数
SDS:SDS在len属性中 记录了 SDS本身的长度,更新插入操作会更新len
2.2 杜绝缓冲区溢出
C:容易造成缓冲区溢出,需要手动分配空间
SDS:自动分配空间
2.3 减少修改字符串时带来的内存重分配次数
空间预分配
扩容时,sds长度小于1M,程序分配和sds长度相同的大小的未分配空间(2*n+1byte,其中1byte为默认空字符,2*n为扩容后的len+free,len=free)
扩容时,sds长度大于1M,程序会分配1MB的未 使用空间
惰性空间释放
缩小空间,并不立即使用内存重分配来回收缩短后多出来的字节而是使用free属性 将这些字节的数量记录起来,并等待将来使用。
2.4 二进制安全
二进制安全的SDS,而不是C字符串,使得Redis不仅可以保存文本数据,还 可以保存任意格式的二进制数据。
兼容部分C字符串函数