脚本宝典收集整理的这篇文章主要介绍了redis数据结构实现--简单动态字符串,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
redis数据结构实现--简单动态字符串
1. SDS简单动态字符串详解
sds是redis自己实现的一种数据结构,用来作为redis底层默认字符串,与c语言的字符串区别开来。
在redis中c字符串一般用于不需要改变的字符串值,叫做字符串字面量,如:打印日志。
redis中每对键值的键都是一个sds对象。
传统c字符串与sds比较:
- sds数据结构中也是用字符数组存储字符串,但是带有两个额外参数:len(记录字符串长度)和free(未使用空间)
- 想要获得传统c字符串的长度不得不遍历整个字符串,然而sds则可直接读取len值。降低了@R_919_1304@
- 两者的字符数组都是以空字符'/0'结尾,在sds中此空字符不计入len中但是也同样分配一个字节空间,空字符的相关操作都是由sds的API自动完成的,所以对于开发者来说此空字符是透明的。sds保持和c字符串一致以空字符作为结尾是为了能够复用c语言的字符串函数库里的函数。
- 传统c字符串如果在对字符串操作没有注意空间剩余有可能会出现内场溢出的现象,而sds的API中执行拼接操作的函数sdscat,拼接时会先判断空间是否足够,如果不够则会先执行扩容操作,从而杜绝内场溢出.
避免频繁内存重分配:传统c字符串的长度为n+1(空字符),每一次apPEnd时需要重新分配内存,否则内存溢出;如果trim字符串,后面不需要的空间也要释放,否则内存泄露。内存重分配设计复杂算法且可能需要系统调度,不符合redis的速度要求。而sds通过free-未使用空间来解除了底层数组长度与字符串长度间的关联,sds拥有空间预分配与惰性空间释放两钟优化策略。
以上是脚本宝典为你收集整理的redis数据结构实现--简单动态字符串全部内容,希望文章能够帮你解决redis数据结构实现--简单动态字符串所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。