zoukankan      html  css  js  c++  java
  • 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!
    ");
            exit(EX_USAGE);
        }
        
    /**
     * jenkins_hash函数的声明在memcached-1.4.22/jenkins_hash.h中。
     * 详细定义在memcached-1.4.22/jenkins_hash.c中
     */
  • 相关阅读:
    NSLog的各种打印格式符 和 打印CGRect时用NSStringFromCGRect
    mac os 隐藏文件夹的小技巧
    Triangle---minimum path sum
    Partition List
    Longest Common Prefix
    Count and Say
    C++ 左值 右值
    py2exe生成.exe(python3.4 尝试)
    longest incresing sequence
    Palindrome number
  • 原文地址:https://www.cnblogs.com/lrxing/p/4273333.html
Copyright © 2011-2022 走看看