redis2. sds 字符串(SimpleDynamicString)

Posted 大辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis2. sds 字符串(SimpleDynamicString)相关的知识,希望对你有一定的参考价值。

 

 

1.标准strcat 会有溢出风险,sdscat无溢出风险

2.空间预分配,惰性空间释放

  空间预分配:sds分配空间时,如果原来是5,free是0, sdscat追加一个10长度的,此时字符串加长到15,free也同时分配15,总长为15 + 15free + 1(/0) 为31字节; 若大于1M后则以1M为单位追加。

  这么做的原因是,内存分配是比较耗时的操作【https://baike.baidu.com/item/realloc/659993?fr=aladdin】,在原地址空间后面若无足够的可用空间,还需要内存拷贝。这样预分配free空间以减少后续的内存分配操作。

  惰性过期:free后不会释放空间,会把减少的字符长度追加到free上。

 3.二进制安全

 

 

 

 

 

 

 

 

以上是关于redis2. sds 字符串(SimpleDynamicString)的主要内容,如果未能解决你的问题,请参考以下文章

Redis2.6源代码走读第002课:简单动态字符串01

01 关于 sds

1简单动态字符串SDS

redis源码阅读——动态字符串sds

redis设计与实现之SDS简单动态字符串

redis设计与实现之SDS简单动态字符串