Redis源代码分析之五:简单动态字符串——Sds
来源:互联网 发布:靠谱的理财产品 知乎 编辑:程序博客网 时间:2024/05/17 15:36
一个Redis字符串的结构体定义是:
struct sdshdr { int len; int free; char buf[];};
其中buf字符数组中储存实际的字符串。len变量保存字符串的长度。free变量指出还有多少字节可用。
sds被定义为一种新的数据类型,实际就是字符指针:
typedef char *sds;
例如,sdsnewlen创建一个指定长度的新的Redis字符串:
sds sdsnewlen(const void *init, size_t initlen) { struct sdshdr *sh; sh = zmalloc(sizeof(struct sdshdr)+initlen+1);#ifdef SDS_ABORT_ON_OOM if (sh == NULL) sdsOomAbort();#else if (sh == NULL) return NULL;#endif sh->len = initlen; sh->free = 0; if (initlen) { if (init) memcpy(sh->buf, init, initlen); else memset(sh->buf,0,initlen); } sh->buf[initlen] = '\0'; return (char*)sh->buf;}
全部的sds接口定义如下:
static inline size_t sdslen(const sds s) { struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); return sh->len;}static inline size_t sdsavail(const sds s) { struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); return sh->free;}sds sdsnewlen(const void *init, size_t initlen);sds sdsnew(const char *init);sds sdsempty();size_t sdslen(const sds s);sds sdsdup(const sds s);void sdsfree(sds s);size_t sdsavail(sds s);sds sdsgrowzero(sds s, size_t len);sds sdscatlen(sds s, void *t, size_t len);sds sdscat(sds s, char *t);sds sdscatsds(sds s, sds t);sds sdscpylen(sds s, char *t, size_t len);sds sdscpy(sds s, char *t);sds sdscatvprintf(sds s, const char *fmt, va_list ap);#ifdef __GNUC__sds sdscatprintf(sds s, const char *fmt, ...) __attribute__((format(printf, 2, 3)));#elsesds sdscatprintf(sds s, const char *fmt, ...);#endifsds sdstrim(sds s, const char *cset);sds sdsrange(sds s, int start, int end);void sdsupdatelen(sds s);void sdsclear(sds s);int sdscmp(sds s1, sds s2);sds *sdssplitlen(char *s, int len, char *sep, int seplen, int *count);void sdsfreesplitres(sds *tokens, int count);void sdstolower(sds s);void sdstoupper(sds s);sds sdsfromlonglong(long long value);sds sdscatrepr(sds s, char *p, size_t len);sds *sdssplitargs(char *line, int *argc);
- Redis源代码分析之五:简单动态字符串——Sds
- Redis源码分析(五)——简单动态字符串(sds)
- redis源码分析之简单动态字符串sds
- Redis SDS简单动态字符串
- Redis内部数据结构详解之简单动态字符串(sds)
- Redis内部数据结构详解之简单动态字符串(SDS)
- redis源码学习之sds简单动态字符串
- Redis内部数据结构详解之简单动态字符串(sds)
- Redis -- 1、简单动态字符串(sds)
- redis内部数据结构--简单动态字符串sds
- Redis源码剖析--简单动态字符串sds
- Redis源码剖析--简单动态字符串sds
- redis数据结构之一-简单动态字符串SDS
- 【redis源码分析】动态字符串--sds
- Redis源码分析(一)——Redis数据结构-字符串SDS
- Redis源码学习——简单动态字符串SDS(Simple Dynamic String)
- 《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS
- Redis 源码解析 string内部实现原理之简单动态字符串SDS
- hdu 2212 DFS
- zookeeper简介
- 使用Audio Queue Services 播放和录制音频
- MySQL存储引擎
- SharePoint 2010部署项目后找不到WebPart的解决办法
- Redis源代码分析之五:简单动态字符串——Sds
- 资源文件的使用
- Oracle多表连接与子查询
- 1048 The Hardest Problem Ever
- Sharepoint 修改密码
- 关于变量的作用域
- java 接口使用例程及匿名类中类的使用
- zoj 1789 The Suspects
- VB中MsFlexGrid控件的使用细则