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[];
}

在这里插入图片描述

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

1.2、SDS与C字符串的区别

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值