From ed9e4966344df0f24b0fceb0778a67789ea60ffd Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 2 Feb 2010 12:19:24 +0100 Subject: [PATCH] Faster version of the function hashing possibly encoded objects, leading to a general speed gain when working with Sets of integers --- redis.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/redis.c b/redis.c index e095e695..87711dab 100644 --- a/redis.c +++ b/redis.c @@ -954,10 +954,24 @@ static int dictEncObjKeyCompare(void *privdata, const void *key1, static unsigned int dictEncObjHash(const void *key) { robj *o = (robj*) key; - o = getDecodedObject(o); - unsigned int hash = dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); - decrRefCount(o); - return hash; + if (o->encoding == REDIS_ENCODING_RAW) { + return dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); + } else { + if (o->encoding == REDIS_ENCODING_INT) { + char buf[32]; + int len; + + len = snprintf(buf,32,"%ld",(long)o->ptr); + return dictGenHashFunction((unsigned char*)buf, len); + } else { + unsigned int hash; + + o = getDecodedObject(o); + hash = dictGenHashFunction(o->ptr, sdslen((sds)o->ptr)); + decrRefCount(o); + return hash; + } + } } /* Sets type and expires */ -- 2.45.2