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)的主要内容,如果未能解决你的问题,请参考以下文章