From: antirez Date: Tue, 2 Feb 2010 11:19:24 +0000 (+0100) Subject: Faster version of the function hashing possibly encoded objects, leading to a general... X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/ed9e4966344df0f24b0fceb0778a67789ea60ffd Faster version of the function hashing possibly encoded objects, leading to a general speed gain when working with Sets of integers --- 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 */