旅游网站模板html免费下载,制作网页原型的目的,旧房改造找哪家,连云港营销型网站建设第2章#xff1a;简单动态字符串
Redis用作键值对或AOF缓冲区的字符串为SDS(简单动态字符串)#xff0c;而不是C语言传统字符串(只用作打印log等不会修改字符串值的地方)。
2.1 SDS的定义
{//SDS字符串长度#xff08;buf数组中已使用的空间#xff09;int len;//buf数组…第2章简单动态字符串
Redis用作键值对或AOF缓冲区的字符串为SDS(简单动态字符串)而不是C语言传统字符串(只用作打印log等不会修改字符串值的地方)。
2.1 SDS的定义
{//SDS字符串长度buf数组中已使用的空间int len;//buf数组中未使用的空间int free;//字节数组用于保存字符串char buf[];
}2.2 SDS与C字符串的区别
2.2.1 常数复杂度获取字符串长度
C语言的传统字符串相当于SDS中的buf[]获取字符串长度时的时间复杂度为O(n)而SDS显然为O(1)。
2.2.2 杜绝缓冲区溢出
在修改字符串等操作时会先判断是否会溢出即原本的buf[]空间是否足够若不够会先对buf[]进行扩展。
2.2.3 减少修改字符串时带来的内存重分配次数
1空间预分配 SDS扩展时小于1MB会分配与len同样的未使用空间大于1MB时分配1MB未使用空间。 2惰性空间释放 在移除SDS中部分字符串时不马上回收空间而是使用free记录在真正需要释放空间时调用方法释放空间。
2.2.4 二进制安全
C字符串以’\0’结尾二进制或带有’\0’的字符串会识别错误。 SDS以len记录字符串数据不会错误识别原字符串汇总的’\0’。
2.2.5 兼容部分C字符串函数
SDS中的buf[]在保存文本数据时相当于C字符串。
SDS API
略原书P17。