redis构建了一种名为简单动态字符串的结构体,用SDS(simple dynamic string,SDS)表示。

struct sdshdr {
    //定义sds已使用的长度
    unsigned int len;
    //定义sds free的长度
    unsigned int free;
    //存储char
    char buf[];
};

举个例子

redis>SET msg "hello world"
OK

那么REDIS将在数据库中创建一个新的键值对,其中:

  • 键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串“msg”的SDS。
  • 键值对的值也是一个字符串对象,对像的底层是一个保存着字符串“hello world”的SDS。

又比如,如果客户端执行命令:

redis>RPUSH fruits "apple" "banana" "cherry"
(integer) 3

那么redis将在数据库中创建一个新的键值对,其中:

  • 键值对的键是一个字符串对象,对象的底层实现是一个保存了字符串“fruits”的SDS。
  • 键值对的值是一个列表对象,列表对象包含了三个字符串对象,这三个字符串对象分别由三个SDS实现;第一个SDS保存着字符串“apple”,第二个SDS保存着字符串对象“banana”,第三个SDS保存着字符串对象“cherry"。

上图展示了一个SDS的示例:

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

results matching ""

    No results matching ""