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中
 */

 

转载于:https://www.cnblogs.com/lrxing/p/4273333.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值