Redis研究-2.简单动态字符串操作
3 月,跳不动了?>>> 上一篇,讲了基本的Redis为什么要使用自己的SDS,以及使用SDS带来的好处,这一篇主要说说针对这个SDS,Redis封装了哪些操作,在看封装的函数之前,先看一下sds.h里面的一个申明:typedef char *sds;这个申明,在Redis的SDS中启到了非常重要的作用,这个字符指针是用于指向 sdshdr 的 buf 属性。因此,如果你要根据这个sds指针来求出SDS的首地址,你应该使用(s-(sizeof(struct sdshdr )))的方式就能得到。 在sds.h中定义了两个局限于本文件使用的两个函数,分别是获得sdshdr的len属性值,以及获得sdshdr的free值,分别是: 获得sdshdr的len属性 static inline size_t sdslen(const sds s) { struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); return sh->len; } 获得sdshdr的free属性 static inline size_t sdsavail(const sds s) { struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); return sh->free; } 同样,在这个头文件中