Redis内部数据结构-sds介绍

“其实现在每天压力都很大,但是自己告诉自己不能退缩,背后是支持我的亲人,我只有努力努力再努力”


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的实现?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容