激流之傲,饭岛奈津美,短信网址
sds 简单动态字符串。
sds的结构:
struct sdshdr{ int len;//记录buf数组中已使用字节的数量 ,等于sds所八寸字符串的长度 int free;//记录buf数组中未使用字节的数量 char buf[];//字节数组,用于保存字符串 }
1、与c语言的字符串相比,sds获取长度时,时间复杂度位o(1),c的复杂度位o(n)。
2、杜绝缓冲区溢出,c字符串若未重新分配内存,在进行字符串拼接时,会导致扩展字符串s1的数据溢出到s2所在的空间,导致s2所保存的内容被意外修改(缓冲区溢出)。
3、杜绝内存泄漏,若裁剪字符串,若未重新分配内存,则会造成内存泄露。
4、对于sds来说,如果扩展,则sds api 会检查空间是否足够,如果足够则直接使用未使用的空间,无需重新分配。惰性释放空间,sds需要缩短时,程序不会立即重新分配内存,而是使用free记录这些多余的空间,等待将来使用。
5、sds的api都是使用二进制安全的,所有的sds api都会以处理二进制的方式处理sds存放在buf数组中的数据,程序不会对其中的数据做任何限制、过滤、或者假设,所以redis不是用数组保存字符串,而是用它来保存一系列的二进制数据。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
MongoDB中数据的替换方法实现类Replace()函数功能详解
理解Redis持久化,RDB持久化和AOF持久化的不同处理方式
网友评论