Redis设计与实现---记录一(关于redis的简单状态字符串)

为什么redis不使用c语言的传统字符串类型,而是要使用自定义的SDS字符串呢?

可以从以下几个方面进行考虑。SDS的结构,

Redis没有直接使用c语言传统的字符串表示,而是自己构建一种名为简单动态字符串,但是在Redis中也会有一些地方会用到简单状态字符串,例如:打印日志

RedisLog(RDIS_WARNING,"Redis is now...")

在Redis中如果不仅仅需要一个字符串变量的时候,而是需要一个可以被修改的字符串的时候,就需要使用SDS

那么在数据库中是如何创建一个新的键值对的呢?

  1. 键值对的键是一个字符串对象,对象的底层的实现是一个保存着字符串的SDS
  2. 键值对的值是一个字符串对象,对象的底层是一个保存着字符串“”HELLO WORD“的SDS

那么Redis中执行是怎么创建键值对的呢?

RPUSH fruits "apple" "banana" "cherry"
  1. 1.键值对的键是一个字符串对象,对象的底层的实现是一个保存着字符串的SDS
  2. 2.键值对的值是一个字符串对象,对象的底层是一个保存着字符串“”HELLO WORD“的SDS实现。

 说了那么久那到底什么是SDS呢?

在Redis中是这样定义SDS的

Struct sdshdr{
    //记录SDS数组的长度
    int len;
    
   //记录b
    int free;

   //字节数组,用于保存字符串
    char buf[]


}

 

 

 SDS遵循C字符串以空字符结尾的惯例,保存空字符的1字节不计算在SDS的len属性里面,并且为空字符串分配额外的1字节的空间。

posted on 2021-06-20 00:07  小连同学ya  阅读(7)  评论(0编辑  收藏  举报