Redis数据结构——简单动态字符串

1、简单动态字符串

redis没有直接用C语言传统的字符串(以空字符结尾的字符数组)表示,而是自己构建了一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示。

在redis里面,C字符串只会作为字符串字面量用在一些无需对字符串值修改的地方,比如打印日志:

redisLog(REDIS_WAINING,"Rdeis is now ready to exit,bye bye...")

当redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,redis就会用SDS来表示字符串值,比如在redis数据库里面,包含字符串值的键值对在底层都是由SDS实现的

1.1,SDS的定义

每个sds.h/sdshdr结构表示一个SDS值:

struct sdshdr {
   
    //记录buf数组中已使用的字节的数量
    //等于SDS所保存的字符串长度
    int len;
    
    //记录buf数组中未使用字节数量
    int free;
    
    //字节数组,用于保存字符串
    char buf[];
}

Redis数据结构——简单动态字符串_第1张图片

  • free 属性的值为0,表示这个SDS没有分配任何可使用的空间
  • len 属性的值为5,表示这个SDS保存了一个五字节长的字符串
  • buf 属性是一个char类型的数组,数组的前五个字符分别保存了’r’,‘e’,‘d’,‘i’,'s’五个字符,而最后一个字节则保存了空字符。

1.2、SDS与C字符串的区别

C语言使用长度为N+1的字符数组来表示长度为N的字符串,并且字符数组

你可能感兴趣的:(Redis,redis,数据结构,数据库)