“其实现在每天压力都很大,但是自己告诉自己不能退缩,背后是支持我的亲人,我只有努力努力再努力”
Sds是什么?
Sds : Simple Dynamic String ,术语——简单动态字符串,它是Redis底层所使用的字符串表示
Sds的用途?
Sds 几乎在Redis所有的模块中都应用了,可见它的作用非常重要。
1、实现字符串对象(StringObject)
2、在Redis程序内部用作char*类型的替代品
为什么Sds取代了C默认的char*类型?
Redis 是一个基于ANSI C语言编写的非关系性数据库。在C语言中字符串的表示是以 \0 结尾的char数组;
例如:hello redis 在C语言中就可以表示为“hello redis\0”
一般来说这种简单的字符串表示,在大多数情况下是能满足要求的。但是它也有一定的缺点,功能单一、抽象层次低、并且不能高效的支持长度计算和追加操作。
长度计算:每次计算字符串长度(strlen(s))的复杂度为θ(N) (这个在书上看到的,不明白)
#include <stdlib.h>
size_t strlen( char *string )
{
int length = 0;
// 依次访问字符串的内容,计算字符数,直至遇到NUL终止符
while( *string++ != '\0' )
length += 1;
return length;
}
追加:对字符串进行N次追加,必定需要对字符串进行N次内存的重新分配
并且Redis的字符串应该是二进制安全的,数据在写入时是什么样,读取时就应该是什么样,程序不应该对其中的数据做出任何的限制、过滤或者假设。
基于以上两点,我们使用sds替换了C语言的默认字符串表示,因为sds可以实现高效的长度计算和追加,并且也是二进制安全的。
Sds的实现?