Memcached源码分析——hash

以下为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!\n");
        exit(EX_USAGE);
    }
    
/**
 * jenkins_hash函数的声明在memcached-1.4.22/jenkins_hash.h中。
 * 详细定义在memcached-1.4.22/jenkins_hash.c中
 */

 

posted @ 2015-02-04 21:51  lrxing  阅读(386)  评论(0编辑  收藏  举报