memcached为何物?

转载 2007年10月06日 00:04:00
原贴:http://www.cnpoint.com/web/2007/0930/content_5617.htm


memcached为何物?

Wednesday, August 29th, 2007

一次听出memcached是在JavaEye上。好多人在讨论通过memcached保存一些信息,减少对数据库的操作。从其他网站上了解了一些关于它的说明:
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

memcached的代码非常少,只有6个标准C文件,代码行也不多,估计花一天时间就可以研究透彻。

首先了解memcached的中心思想,就如上面所说的,是一个巨大的hash表,就key,value对。客户端通过socket设置、获得、替换、删除key以及对应的value。这么说来还是比较简单的。

memcached.c为程序的主代码,包含了入口main、处理socket协议等功能。它使用了libevent处理协议,在Linux下是epoll方式。

slabs.c内存管理模块,就是存储客户端需要设置的key和value。 slabs事先创建一系列不同字节数的数组,比如默认情况下创建8K个128字节数组,4K个256字节数组,2K个512字节数组等,依次类推,当然字 节数不同,相应的数组大小也是不同的,这里的128、256等数值对应的1,2等称为clsid,clsid最大为200,最大字节数为1M(所以上面描 述能够保存图片和视频是不可能的)。memcached武断地认为字节数越大,出现的几率越小,数组大小也越小。难道实际情况就是这样的吗?

items.c主要功能是处理key、value,当然远没有这么简单。它使 用了链表保存不同的item。其中不同长度的key+value对应的item放到最接近clsid的数组中,比如长度为200的就放到256对应的数组 中,呵呵,还挺浪费的。这里有两个链表,一个是clsid相同的item组成一个链表,这个链表是双向的,它们的clsid都相同;另外一个就是key的 hash值相同的链表,这个链表是单向的,主要解决hash冲突的,它们的hash值都相同。这也是查找key的最快方法,为什么不用红黑树呢?

assoc.c就比较简单了,就是一个大数组,以item中key的hash值为数组的下标,数组的值就是一个item值,由于item是链表,所以后面就有一组相同hash值的item链表。

daemon.c是精灵程序代码,纳闷为什么只fork了一次,按照经典的做法是要fork两次的。

thread.c是处理多线程的代码,由于memcached是非阻塞的方式处理socket的(使用libevent特性),理论上讲多线程不会提升性能,除非有多个CPU,一个CPU对应一个线程。

整个代码中,自己感觉“池子”很多,这可能是从性能上考虑的吧。比如slabs、thread中都使用到了内存池,thread中使用了线程池(比较简单而已)。

memcached代码写得比较简洁,实现很巧妙,性能也非常高。


本文引用地址:http://cnpoint.com/web/2007/0930/content_5617.htm

 

我为何物?

我为何物?记得刚刚建立人生观的时候一直想一个问题:我,为何物?那时书上写,人是物质的,精神也是物质的。那么我,是什么呢?从生物学来的证据说明,人体组织都有一定的代谢周期,是一个以半衰期形式存在的周期。...
  • gashero
  • gashero
  • 2005年10月31日 18:37
  • 1117

问佛陀情为何物

如今很多人的爱是一种占有,有许多实用主义的成分——对方能让自己快乐,就跟他朝朝暮暮在一起;如果他给自己带来痛苦,则恨不得灭之而后快。这种爱,实际上就是痛苦之因。 与这种自私自利的爱相比,佛教的爱是对一...
  • liuqiaoying_lqy
  • liuqiaoying_lqy
  • 2013年12月16日 11:31
  • 1077

Java常用算法——迭代 & 递归篇

迭代 & 递归迭代(1).定义来自维基百科: 迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次”迭代”,而每一次迭代得到的结果会被用来作为下一次迭...
  • liujian20150808
  • liujian20150808
  • 2017年01月23日 09:51
  • 843

分享照片为何物

http://www.ifanr.com/33039
  • firepresscn
  • firepresscn
  • 2011年08月17日 09:48
  • 91

BootLoader为何物

 在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:       1、 引导加载程序。包括固化在固件(firmware)中的b...
  • yygydjkthh
  • yygydjkthh
  • 2008年11月24日 22:51
  • 668

爱为何物

爱为何物       有人说:没了爱,人生犹如荒漠。   有了爱,生命就是绿洲吗?   一生中,绝少有人不经历几次爱与被爱。父母儿女之爱、情侣夫妻之爱、兄弟朋友之爱……然而,满目的却是:人生喜剧...
  • u013568834
  • u013568834
  • 2014年07月25日 18:31
  • 289

注解为何物!

什么是注解 怎么自定义注解 注解的分类
  • Jiassheng
  • Jiassheng
  • 2017年03月25日 14:52
  • 87

钱为何物?

一、爱钱,却不知道自己爱的是什么,是个问题。 1、钱是什么? 2、钱是怎么产生的? 3、钱,是文化的产物。 二、钱在生活中的意义。 1、钱,可以带来自由。是生活的基本保障。但,钱是靠知识挣来的。 2、...
  • maqingqing1992
  • maqingqing1992
  • 2015年11月28日 12:53
  • 113

EJB到底为何物?

在我做的系统中,原来使用的是EJB,然后EJB到底是何方圣神,总是感觉一头雾水,所以上网查找大牛文章,查了很多资料,这位大牛讲解的最清楚易懂,特此收藏。 http://blog.csdn.net/jo...
  • tiansikeji
  • tiansikeji
  • 2015年07月06日 11:56
  • 73

色为何物

色是生命的颜色 
  • limitedlove
  • limitedlove
  • 2007年06月16日 12:40
  • 327
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memcached为何物?
举报原因:
原因补充:

(最多只允许输入30个字)