热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » 学习memcached的心得

学习memcached的心得

论坛链接
  • 学习memcached的心得
  • 发布时间:2009-07-26 22:50:30    浏览数:7127    发布者:superadmin    设置字体【   
这一周都在看memcached源代码,看完各个文件再结合一些前人写的心得,昨天再重新过一遍memecached的源代码,总算有了总体上的理解。本来想写篇学习笔记,可是太懒了写了一会又放弃,而且前人写的分析已经很详细了,参考他们的就好了。
新认识了memcache的几个地方,第一就是新增的几个命令:cas append prepend,
cas命令是用来改变一个存在的key的值,但它还带了检查的功能,原文如下:
“cas” is a check and set operation which means “store this data but only if no one else has updated since I last fetched it.”
意思是说如果这个值我最后一次取的没有被修改的话才存储这个值,比如我先获取一个key为”update_time”的值,然后有其他进程修改了这个值,此时我再调用cas设置这个值时则会返回一个EXSISTS的错误表示修改失败。
cas命令的语法是这样:cas key flags exptime cas_unique,
最后一个参数表示这个key的版本,是在调用gets命令获取的时候返回的。
gets uptime
VALUE uptime 0 10 2
2008-03-20
END
最后一个2就是这个key的修改版本,需要用cas更新这个值:
cas uptime 0 0 10 2
2008-03-22

append和prepend是在这个值后面或前面插入新值
append uptime 0 0 10
(18:30:26)
再查看:
get uptime
2008-03-22(19:30:26)

另外在调用stats命令查看memcached服务器具体信息的时候,有这样的一行:
STAT evictions 0
这个evictions是表示因为要腾出新的空间给新的item而移去的合法的item数目,可以参考这个参数状态来决定是否需要给memcached服 务器增加内存,如果后面的那个数值很大那说明分配的内存不够以致memcached不得不挪走当前还有用的item来存放的item.

memcached用了slab allocator(内存分配器)来管理内存,而不是用系统自带的malloc,因为用malloc会产生很多内存碎片。memcached在启动时会申 请一块很大的内存,然后用它的slab allocator来管理内存,这样就不用每存一个item就需要调用一次malloc,删除item的时候也不会free掉这块内存空间,具体的申请内 存的操作可以参考do_slabs_alloc这个函数。当然memcached也支持系统的malloc方式申请内存,只要在编译的时候定义 USE_SYSTEM_MALLOC宏就可以了。

从1.2.2版本以后memcached就开始支持多线程了,在编译的时候定义USE_THREADS宏就可以。默认会创建4个线程,主线程用于监 听客户建立的连接请求、accpet请求,然后通过管道通知子线程,由子线程处理读写请求。memcached的多线程主要是通过实例化多个 libevent实现的,分别是一个主线程和n个workers线程,无论是主线程还是workers线程全部通过libevent管理网络事件,实际上 每个线程都是一个单独的libevent实例。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理