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

 

2.6.28版本起,staging目录下所谓何物????

2.6.28版本起,内核代码的drivers下增加了一个staging目录,这个目录也是用来存放驱动程序,只是这里的驱动和上层目录的不同,加载的时候内核log会打印如下的语句: MODULE...
  • a785984
  • a785984
  • 2013年12月31日 17:44
  • 734

[转]虚拟IP为何物?

原文地址:http://my.oschina.net/qihh/blog/59788 linux配置虚拟IP地址方法 刚才重启了一台服务器的网络,结果发现域名不能访问了,ip可以访...

学过C语言了?那么你知道位段为何物啊?

C语言中用结构实现位段--个人心血!值得一看哦!C语言中的结构是有实现位段的能力的,噢!你问它到底是什么形式是吧?这个问题呆会给你答案。让我们先看看位段的作用:位段是在字段的声明后面加一个冒号以及一个...

问世间情为何物PHP直让人俺生死相许

在一个错误的时间和一个错误的地点做了自己该做的事 就在一年前我苦苦追求了她三个月正当我决定与PHP私定了终身那个时候“PHP他妈”死活不同意让她女儿跟我; 说对她闺女不好咋滴咋滴。 “...

Android大话设计模式 第一章----针对接口编程---问世间情为何物 直教人生死相许

“十六年后 在此重会;夫妻情深 勿失信约”,悲痛欲绝的杨过跑到断肠崖,看到小龙女亲手留在石壁上的文字,即惊喜又痛苦不欲生:“十六年!为什么要等到十六年?!”。 但是信约已定,痴情的杨过也只能等十...

Bdsyn百度手机助手是何物,它是如何神不知鬼不觉地安装到你的电脑里的?

【电脑软件管理中Bdsyn手机助手的问题】Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Infor...

WebDriver为何物?

对Web进行自动化测试,我们首先想象一个简单的场景,来看看需要测试哪些东西: a. 元素定位:无论使用XPath, Dom还是CSS,需要简单方便的API定位元素,可以延时等待元素出现; b. 交...
  • zoyhao
  • zoyhao
  • 2014年10月20日 09:33
  • 187

MipMap与LOD是何物?

Unity知识—Mipmap是何物?

B/S与C/S究竟是何物

[架构设计]由面试引发的思考:B/S与C/S究竟是何物 由面试引发的思考:B/S与C/S究竟是何物 一、现状说明: 就在这金三银四的求职黄金时期,我有幸作为公司的独立技术面试官,拥有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memcached为何物?
举报原因:
原因补充:

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