以下为memcached中关于使用的hash算法的一点记录
memcached中默认使用的是Bob Jenkins的jenkins_hash算法
以下4段代码均在memcached-1.4.22/hash.h
以下为hash函数的声明,hashfunc_type的定义,以及hash_init函数的声明
/** * 定义一个函数指针类型 */ typedef uint32_t (*hash_func)(const void *key, size_t length); /** * 定义函数指针为hash */ hash_func hash; /** * 定义枚举类型,其中JENKINS_HASH=0,MURMUR3_HASH=1 */ enum hashfunc_type { JENKINS_HASH=0, MURMUR3_HASH }; /** * 声明hash初始化函数 hash_init */ int hash_init(enum hashfunc_type type);
/** * 判断:如果hashfunc_type为0,则hash指针指向函数jenkins_hash,并返回0; * 如果hashfunc_type为1,则hash指针指向函数MurmurHash3_x86_32,并返回0; * 否则,返回-1 * 以下代码在memcached-1.4.22/hash.c */ int hash_init(enum hashfunc_type type) { switch(type) { case JENKINS_HASH: hash = jenkins_hash; settings.hash_algorithm = "jenkins"; break; case MURMUR3_HASH: hash = MurmurHash3_x86_32; settings.hash_algorithm = "murmur3"; break; default: return -1; } return 0; }
/** * hash初始化在memcached-1.4.22/memcached.c 中的main函数第5413到5416行进行的 */ if (hash_init(hash_type) != 0) { fprintf(stderr, "Failed to initialize hash_algorithm! "); exit(EX_USAGE); } /** * jenkins_hash函数的声明在memcached-1.4.22/jenkins_hash.h中。 * 详细定义在memcached-1.4.22/jenkins_hash.c中 */