提交 e5b7a215 编写于 作者: A antirez

hand written code to turn a long long into a string -> very big speed win

上级 bf028098
......@@ -2897,7 +2897,19 @@ static robj *createStringObjectFromLongLong(long long value) {
o->encoding = REDIS_ENCODING_INT;
o->ptr = (void*)((long)value);
} else {
o->ptr = sdscatprintf(sdsempty(),"%lld",value);
char buf[32], *p;
char *c = "0123456789";
unsigned long v;
v = (value < 0) ? -value : value;
p = buf+31; /* point to the last character */
while(v) {
*p-- = c[v%10];
v /= 10;
}
if (value < 0) *p-- = '-';
p++;
o = createObject(REDIS_STRING,sdsnewlen(p,32-(p-buf+1)));
}
}
return o;
......@@ -3794,7 +3806,7 @@ static robj *rdbLoadIntegerObject(FILE *fp, int enctype) {
val = 0; /* anti-warning */
redisPanic("Unknown RDB integer encoding type");
}
return createObject(REDIS_STRING,sdscatprintf(sdsempty(),"%lld",val));
return createStringObjectFromLongLong(val);
}
static robj *rdbLoadLzfStringObject(FILE*fp) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册