diff options
author | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2011-08-18 13:03:04 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-09-13 12:26:53 +0200 |
commit | 325d2eb8b519b320598b63e5942fea1c4099bd6f (patch) | |
tree | 524b69e2e4a51fe2c70ac884d67273b582d25094 | |
parent | 0fb6212cf4fd689c890e4cbbe1e3f724e341972e (diff) | |
download | redis-325d2eb8b519b320598b63e5942fea1c4099bd6f.tar.gz |
Speed up protocol synthesis for AOF
-rw-r--r-- | src/aof.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -110,17 +110,29 @@ void flushAppendOnlyFile(void) { } } -sds catAppendOnlyGenericCommand(sds buf, int argc, robj **argv) { - int j; - buf = sdscatprintf(buf,"*%d\r\n",argc); +sds catAppendOnlyGenericCommand(sds dst, int argc, robj **argv) { + char buf[32]; + int len, j; + robj *o; + + buf[0] = '*'; + len = 1+ll2string(buf+1,sizeof(buf)-1,argc); + buf[len++] = '\r'; + buf[len++] = '\n'; + dst = sdscatlen(dst,buf,len); + for (j = 0; j < argc; j++) { - robj *o = getDecodedObject(argv[j]); - buf = sdscatprintf(buf,"$%lu\r\n",(unsigned long)sdslen(o->ptr)); - buf = sdscatlen(buf,o->ptr,sdslen(o->ptr)); - buf = sdscatlen(buf,"\r\n",2); + o = getDecodedObject(argv[j]); + buf[0] = '$'; + len = 1+ll2string(buf+1,sizeof(buf)-1,sdslen(o->ptr)); + buf[len++] = '\r'; + buf[len++] = '\n'; + dst = sdscatlen(dst,buf,len); + dst = sdscatlen(dst,o->ptr,sdslen(o->ptr)); + dst = sdscatlen(dst,"\r\n",2); decrRefCount(o); } - return buf; + return dst; } sds catAppendOnlyExpireAtCommand(sds buf, robj *key, robj *seconds) { |