redis--sds API 详解

本文详细介绍了Redis中sds(Simple Dynamic Strings)的数据结构、API及其操作,包括创建、长度操作、扩容、追加、拷贝、格式化输出、比较、切割、范围操作、复制及释放等,深入解析了sds在内存管理和字符串处理上的高效特性。
摘要由CSDN通过智能技术生成

1,sds 数据结构

typedef char *sds;

struct sdshdr {
    long len;
    long free;
    char buf[0];
};

  注意:sizeof(struct sdshdr)的大小只包括 sizeof(len)和sizeof(free),不含buf数组,buf数组的内存紧随这个结构体后面。

2,sds API

函数名称 作用 复杂度
sdsempty 创建一个只包含空字符串””的sds O(N)
sdsnew 根据给定的C字符串,创建一个相应的sds O(N)
sdsnewlen 创建一个指定长度的sds,接受一个指定的C字符串作为初始化值 O(N)
sdsdup 复制给定的sds O(N)
sdsfree 释放给定的sds O(1)
sdsupdatelen 更新给定sds所对应的sdshdr的free与len值 O(1)
sdsMakeRoomFor 对给定sds对应sdshdr的buf进行扩展 O(N)
sdscatlen 将一个C字符串追加到给定的sds对应sdshdr的buf O(N)
sdscpylen 将一个C字符串复制到sds中,需要依据sds的总长度来判断是否需要扩展 O(N)
sdscatprintf 通过格式化输出形式,来追加到给定的sds O(N)
sdstrim 对给定sds,删除前端/后端在给定的C字符串中的字符 O(N)
sdsrange 截取给定sds,[start,end]字符串 O(N)
sdscmp 比较两个sds的大小 O(N)
sdssplitlen 对给定的字符串s按照给定的sep分隔字符串来进行切割 O(N)

3,sds ---创建

   1) 创建一个空的sds,len和free都为0,buf数组也为空。

sds sdsempty(void) {
    return sdsnewlen("",0);
}

    2) 创建一个sds(空的或非空)。

sds sdsnew(const char *init) {
    size_t initlen = (init == NULL) ? 0 : strlen(init);
    return sdsnewlen(init, initlen);
}

    3) 其中均会调用sdsnewlen,这个函数主要是分配内存和赋值。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值