Redis基本数据类型String——数据结构解析

String

Redis没有直接使用C语言的传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型。
下面我将解释为什么Redis要自己构建SDS而不是直接用C语言的String,原因其实很简单,一切都是为了提升Redis操作的性能

SDS的定义

这里我先给出SDS的定义,下面我会对它特有的属性进行解析,大家在看的时候可以思考以下几点,为什么需要这个属性?
这个属性有什么用?没有这个属性会怎么样?在之后的数据结构解析中,希望大家也能带着相似的问题去思考Redis的设计。

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

一个简单的SDS字符串

image.png

SDS字符串相比C语言字符串的优势

SDS字符串由于它比C语言字符串多出来的几个属性,所以SDS字符串很多操作效率都比C语言字符串快得多,属于典型的空间换时间策略。

常数复杂度获取字符串长度

众所周知,C语言字符串想获取长度,就得遍历整个字符串。

下图为C语言获取字符串长度的过程

digraph {      rankdir = TB;      node [shape = record];      str [label = " <1> 'R' | <2> 'e' | <3> 'd' | <4> 'i' | <5> 's' | <6> '\0' "];      node [shape = plaintext];      p1 [label = "len = 1"];      p1 -> str:1;  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值