Redis自定义动态字符串(sds)模块

Posted 扫地猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis自定义动态字符串(sds)模块相关的知识,希望对你有一定的参考价值。

sds模块的具体实现:

1、sdsnewlen 根据参数生成一个sds字符串

 1 sds sdsnewlen(const void *init, size_t initlen) 
 2 {
 3     struct sdshdr *sh;
 4   //如果初始化的内容为NULL,则生成一个内容只有一个\0的串,但是长度不会变,还是传入的长度。zmalloc和zcalloc的功能一样,这个地方为啥还要调用不同的呢。
 5     if (init) {
 6         sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
 7     } else {
 8         sh = zcalloc(sizeof(struct sdshdr)+initlen+1);
 9     }
10     if (sh == NULL) return NULL;//申请失败返回NULL
11     sh->len = initlen;//初始化长度为传入值。
12     sh->free = 0;//设定剩余长度为0
13     if (initlen && init)
14         memcpy(sh->buf, init, initlen);//初始化值
15     sh->buf[initlen] = \0;填写最后的结尾符
16     return (char*)sh->buf;
17 }

未完待续。。。

以上是关于Redis自定义动态字符串(sds)模块的主要内容,如果未能解决你的问题,请参考以下文章

Redis源码解析01: 简单动态字符串SDS

关于redis中SDS简单动态字符串

redis源码阅读——动态字符串sds

一文带你快速搞懂动态字符串SDS,面试不再懵逼

一文带你快速搞懂动态字符串SDS,面试不再懵逼

redis源码解析——SDS(简单动态字符串)