2、Redis中简单动态字符串的简介,也就是Redis中的键和值的字符串底层表达

简介

首先在Redis中,没有直接使用C语言传统字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型(可以简单的理解为Java中的String 类),并且将SDS用作Redis的默认字符串表示。

C语言字符串:

#include <stdio.h>

int  main()

{


     char c0[] = { 'c', ' ', 'p', 'r', 'o', 'g'}; //普通字符数组

    printf("c0 = %s\n", c0); //没有乱码,因为编译的时候,以字符串格式输出的时候,默认在数组尾部追加了'\0' 
    

    char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' ,0}; //普通字符数组

    printf("c1 = %s\n", c1); //没有乱码 

    //以 0 (‘\0’就是数字0)结尾的字符数组是字符串

    char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0' };

    printf("c2 = %s\n", c2);

    //字符串处理以‘\0’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出

    char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0' };

    printf("c3 = %s\n", c3);

    return 0;

}

在这里插入图片描述

Redis里面,C字符串只会作为字符串字面量(string literal)用在一些无需对字符串值,修改的地方,例如打印日志:

redisLog(REDIS_WARNING,"Redis is now reday to exit,bye bye . . .")

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

举个例子:
如果客户端执行一个命令:

redis > SET msg "hello world"
OK

那么Redis 将在数据库中创建一个新的键值对,其中:
键值对的键 msg ,底层实现是一个保存着字符串"msg"的SDS
键值对的值,底层实现是一个保存着字符串"hello world" 的SDS

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

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

那么,Redis 将在数据库中 ,创建一个新的键值对,其中:
1、键值对的键 是一个字符串对象,对象的底层保存着一个字符串"fruits “的SDS。
2、键值对的值,是一个列表对象,列表对象中包含了3个字符串对象,这3个字符串对象分别由3个SDS实现: 分别保存着"apple” 、“banana” 、“cherry” 字符串对象。

SDS除了用来保存数据库中的字符串值以外,SDS还被用作缓冲区:AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区,都是由SDS实现的,我会在别的章节中介绍AOF持久化和客户端状态的时候,可以看到SDS在这2个模块中的应用。

下面将会对SDS的实现进行介绍,说明SDS和C字符串的不同之处,解释为什么Redis要使用SDS而不是C字符串,并且在最后给出SDS的操作api

SDS实现介绍:
链接: 2.1 SDS的定义
链接: 2.2 SDS 与C字符串的区别

链接: 2.3 SDS的API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值