summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Noordhuis <pcnoordhuis@gmail.com>2011-08-18 13:03:04 +0200
committerantirez <antirez@gmail.com>2011-09-13 12:26:53 +0200
commit325d2eb8b519b320598b63e5942fea1c4099bd6f (patch)
tree524b69e2e4a51fe2c70ac884d67273b582d25094
parent0fb6212cf4fd689c890e4cbbe1e3f724e341972e (diff)
downloadredis-325d2eb8b519b320598b63e5942fea1c4099bd6f.tar.gz
Speed up protocol synthesis for AOF
-rw-r--r--src/aof.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/aof.c b/src/aof.c
index 7093a91bc..114967185 100644
--- a/src/aof.c
+++ b/src/aof.c
@@ -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) {