以下为memcached中关于使用的hash算法的一点记录

memcached中默认使用的是Bob Jenkins的jenkins_hash算法

以下4段代码均在memcached-1.4.22/hash.h

以下为hash函数的声明,hashfunc_type的定义,以及hash_init函数的声明

  1. /**
  2. * 定义一个函数指针类型
  3. */
  4. typedef uint32_t (*hash_func)(const void *key, size_t length);
  5.  
  6. /**
  7. * 定义函数指针为hash
  8. */
  9. hash_func hash;
  10.  
  11. /**
  12. * 定义枚举类型,其中JENKINS_HASH=0,MURMUR3_HASH=1
  13. */
  14. enum hashfunc_type {
  15. JENKINS_HASH=0, MURMUR3_HASH
  16. };
  17.  
  18. /**
  19. * 声明hash初始化函数 hash_init
  20. */
  21. int hash_init(enum hashfunc_type type);
  1. /**
  2. * 判断:如果hashfunc_type为0,则hash指针指向函数jenkins_hash,并返回0;
  3. * 如果hashfunc_type为1,则hash指针指向函数MurmurHash3_x86_32,并返回0;
  4. * 否则,返回-1
  5. * 以下代码在memcached-1.4.22/hash.c
  6. */
  7. int hash_init(enum hashfunc_type type) {
  8. switch(type) {
  9. case JENKINS_HASH:
  10. hash = jenkins_hash;
  11. settings.hash_algorithm = "jenkins";
  12. break;
  13. case MURMUR3_HASH:
  14. hash = MurmurHash3_x86_32;
  15. settings.hash_algorithm = "murmur3";
  16. break;
  17. default:
  18. return -1;
  19. }
  20. return 0;
  21. }
  1. /**
  2. * hash初始化在memcached-1.4.22/memcached.c 中的main函数第5413到5416行进行的
  3. */
  4. if (hash_init(hash_type) != 0) {
  5. fprintf(stderr, "Failed to initialize hash_algorithm!\n");
  6. exit(EX_USAGE);
  7. }
  8.  
  9. /**
  10. * jenkins_hash函数的声明在memcached-1.4.22/jenkins_hash.h中。
  11. * 详细定义在memcached-1.4.22/jenkins_hash.c中
  12. */

Memcached源码分析——hash的更多相关文章

  1. Memcached源码分析之内存管理

    先再说明一下,我本次分析的memcached版本是1.4.20,有些旧的版本关于内存管理的机制和数据结构与1.4.20有一定的差异(本文中会提到). 一)模型分析在开始解剖memcached关于内存管 ...

  2. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  3. Memcached源码分析之请求处理(状态机)

    作者:Calix 一)上文 在上一篇线程模型的分析中,我们知道,worker线程和主线程都调用了同一个函数,conn_new进行事件监听,并返回conn结构体对象.最终有事件到达时,调用同一个函数ev ...

  4. Memcached源码分析之线程模型

    作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...

  5. Memcached源码分析之从SET命令开始说起

    作者:Calix 如果直接把memcached的源码从main函数开始说,恐怕会有点头大,所以这里以一句经典的“SET”命令简单地开个头,算是回忆一下memcached的作用,后面的结构篇中关于命令解 ...

  6. Memcached源码分析

    作者:Calix,转载请注明出处:http://calixwu.com 最近研究了一下memcached的源码,在这里系统总结了一下笔记和理解,写了几 篇源码分析和大家分享,整个系列分为“结构篇”和“ ...

  7. Memcached源码分析——内存管理

    注:这篇内容极其混乱 推荐学习这篇博客.博客的地址:http://kenby.iteye.com/blog/1423989 基本元素item item是Memcached中记录存储的基本单元,用户向m ...

  8. Memcached源码分析——process_command函数解析

    以下为个人笔记 /** * process_command 在memcached中是用来处理用户发送的命令的, * 包括get set,add,delete,replace,stats,flush_a ...

  9. memcached源码分析一-slab

    Slab作为一种内存管理方案,其作用主要有以下2点: a) 避免频繁的内存分配释放造成的内存碎片 b) 减少内存分配操作产生的性能开销 Linux内核数据结构中也有slab的设计,Linux提供了一套 ...

随机推荐

  1. Android网络:开发浏览器(一)——基本的浏览网页功能开发

    我们定义这个版本为1.0版本. 首先,因为要制作一个浏览器,那么就不能通过调用内置浏览器来实现网页的浏览功能,但是可以使用WebView组件来进行. 在此之前,我们可以来看看两种网页显示方式:     ...

  2. sqlserver使用户只能在某个架构下建立表和存储过程

    1.首先,建立一个用户之后,默认的架构是dbo,默认的角色是public.这种情况下,这个用户将看不到dbo以及其他架构下的对象.除非单独进行授权.   2.新建一个架构test,然后使得这个架构的所 ...

  3. 深入了解JavaScript中的for循环

    在ECMAScript5中,有三种for循环,分别是: 简单for循环 for-in forEach 在ES6中,新增了一种循环 for-of 简单for循环 const arr = [1, 2, 3 ...

  4. DateTimePicker控件为空 分类: WinForm 2014-04-15 09:46 239人阅读 评论(0) 收藏

    设置属性:                 Format=Custom 加载事件:ValueChanged    private void dtpStart_ValueChanged(object s ...

  5. iOS10相机等崩溃

    当使用iOS10使用相机时会出现崩溃 This app has crashed because it attempted to access privacy-sensitive data withou ...

  6. SafeNet推出行业首款白盒password软件保护解决方式

    数据保护领域的全球率先企业SafeNet公司日前宣布,推出行业首款採用白盒安全技术的的软件保护方案.SafeNet 圣天诺 软件授权与保护解决方式如今纳入了新的功能,可在"白盒" ...

  7. [转] 多线程下变量-gcc原子操作 __sync_fetch_and_add等

    http://blog.sina.com.cn/s/blog_6f5b220601013zw3.html 非常好的原子操作,不用加锁:__sync_fetch_and_add GCC 提供的原子操作 ...

  8. Gson解析json数据(转)

    一. www.json.org这是JSON的官方网站. 首先,我,我们需要在code.google.com/p/google-gson/downloads/list下载JSON的jar包,解析后把gs ...

  9. POJ 2007 Scrambled Polygon 凸包

    Scrambled Polygon Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7214   Accepted: 3445 ...

  10. Python多进程使用

    [Python之旅]第六篇(六):Python多进程使用   香飘叶子 2016-05-10 10:57:50 浏览190 评论0 python 多进程 多进程通信 摘要:   关于进程与线程的对比, ...