From: Pieter Noordhuis Date: Tue, 14 Dec 2010 09:31:11 +0000 (+0100) Subject: Don't decode object on STRLEN when not necessary X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/7ecd4644e7fe48309d4b8445ec62c7fe8c0443ff?ds=sidebyside Don't decode object on STRLEN when not necessary --- diff --git a/src/t_string.c b/src/t_string.c index 3b91f5e6..d537c8b9 100644 --- a/src/t_string.c +++ b/src/t_string.c @@ -358,7 +358,14 @@ void strlenCommand(redisClient *c) { if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.czero)) == NULL || checkType(c,o,REDIS_STRING)) return; - o = getDecodedObject(o); - addReplyLongLong(c,sdslen(o->ptr)); - decrRefCount(o); + if (o->encoding == REDIS_ENCODING_RAW) { + addReplyLongLong(c,sdslen(o->ptr)); + } else if (o->encoding == REDIS_ENCODING_INT) { + char llbuf[32]; + int len = ll2string(llbuf,sizeof(llbuf),(long)o->ptr); + addReplyLongLong(c,len); + } else { + redisPanic("Unknown string encoding"); + } } +