鹤壁建设网站推广,公司网站可以做无形资产么,pycharm做网站,自己可以建设一个网站要钱简单动态字符串
传统上的C语言的字符串表示是以空字符结尾的字符数组#xff08;C字符串#xff09;#xff0c;redis自己实现一个动态字符串#xff08;SDS#xff09;#xff0c;两者之间的区别以及使用SDS的好处有#xff1a;
结构不同。C字符串以空字符结尾的字符…简单动态字符串
传统上的C语言的字符串表示是以空字符结尾的字符数组C字符串redis自己实现一个动态字符串SDS两者之间的区别以及使用SDS的好处有
结构不同。C字符串以空字符结尾的字符数组而SDS表现的更为复杂使用一个结构体来表示一个SDS如图所示。其中free属性表示buffer字符数组中剩余的空间len表示已经使用的空间。另外SDS遵守C字符串的惯例以空字符结尾这样就可以复用一些C字符串的API例如打印函数等。 常数级别的读取字符串长度。C字符串每次读取length都需要遍历一次buffer数组而SDS通过返回len属性直接得到长度。防止数据溢出。C字符串在创建时需要分配一定的空间如果两个字符串s1,s2在内存空间紧密相连这时对字符串s1后面添加一个字符串而又忘记为s1重新分配足够的空间那么s1数据将溢出到s2的空间上而SDS通过判断free属性来判断当前空余空间是否充足来保证正确的字符串增加等。采用预空间分配和惰性空间释放减少修改字符串带来的内存重分配次数。预空间分配当对SDS修改并且free空间不足需要进行扩展在补充不足空间的同时也会增加free的值如果buffer的长度小于1M那么扩展后的buffer长度等于lenfree1bytefreelen如果buffer长度大于等于1M那么扩展后的buffer长度等于len1M1byte。惰性空间释放当执行字符串缩减时不用释放空间直接将需要释放的空间纳入到free中减少内存释放以及重分配的次数。二进制安全。C字符串只能保存文本数据不能保存音频图像压缩文件等二进制文件因为C字符串以\0结束而SDS可以因为SDS不是利用空字符来判断字符串结束而是通过len属性来判断。
另外SDS也兼容了C字符串的一些API因为在buffer数组使用C字符串的惯例以空字符结尾这样的好处就是redis不用自己在重新实现可以复用一部分C字符串的API。 本文为《Redis设计与实现》阅读笔记