|
一个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)));
- #else
- sds sdscatprintf(sds s, const char *fmt, ...);
- #endif
- sds 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);
复制代码
作者:Aegeaner 发表于2012-2-4 15:40:27 原文链接
|
|