Redis源码学习之【动态字符串】

介绍

由于在标准C中没有字符串这一类型,因而Redis实现了一个自己的字符串sds。

源文件

sds.h sds.c

分析

数据结构

// sds 类型
typedef char *sds;

// sdshdr 结构
struct sdshdr {

    // buf 已占用长度
    int len;

    // buf 剩余可用长度
    int free;

    // 实际保存字符串数据的地方
    char buf[];
};


特点

主要支持如下操作

new,dump,cat,cpy,printf,trim,range,tolower/toupper,cmp,split,fromlonglong,以及和hex之间的转换等。

技巧:

  • sds就像是管理内存一样不过这里是管理的字符,需要保存其长度和空闲空间
  • 使用预分配空间来扩展sds
  • 支持自动扩展

你可能感兴趣的:(redis)