码迷,mamicode.com
首页 > 其他好文 > 详细

redis_简单动态字符串

时间:2018-06-04 16:43:44      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:数组   led   imp   nbsp   长度   其他   简单   获取   int   

在redis中,C字符串(以‘\0‘结尾的字符数组)只用在一些无需对字符串值进行修改的地方,比如打印日志。其他情况,redis使用SDS - SimpleDynamicString 简单动态字符串,来做。

比如

127.0.0.1:6379> set testKey "testValue"
OK

键,是一个字符串对象,底层是一个保存着字符串"testKey"的SDS

值也是一个字符串对象,底层是一个保存着字符串"testValue"的SDS

 

SDS 定义

struct sdshdr {
    // 记录buf数组中已使用的字节数,等同于字符串长度(不包括结尾的\0)
    int len;
    // 记录buf数组中未使用的字节数
    int free;
    // 实际保存字符串的字节数组
    char buf[];
}

比如一个字符串"test":

  len = 4

  free = 0(这个不一定,初始时为0,后续说明)

  buf[] = ‘t‘、‘e‘、‘s‘、‘t‘、‘\0‘,注意结尾与C相同,也存在‘\0‘,不记入字符串长度

这样做的特点与优势

1. 常数复杂度获取字符串长度:

  • C字符串不记录长度,只能遍历,到\0得到长度,时间复杂度O(n),SDS可以直接记录len为长度,时间复杂度O(1)

2. 

3. 

4. 

5. 

6. 

 

redis_简单动态字符串

标签:数组   led   imp   nbsp   长度   其他   简单   获取   int   

原文地址:https://www.cnblogs.com/loveCheery/p/9133343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!