【部署策略】
基于memcached的slab和dump的内存管理方式,它产生的内存碎片比较少,不须要OS去作繁杂的内存回收,因此它对CPU的占用率那是至关的低。因此建议将它跟占用CPU较高的WEB服务器一块儿使用来节省成本。固然若是你有大量的廉价PC,那用来专门作memcached服务器也不错。因为32位操做系统中,每一个进程最多只能使用2GB内存,因此若是你有大内存的话,能够以daemon的方式启动两个以上的memcached服务,或者干脆用64位的CPU和OS。php
【服务监控】
memcached支持分布式机制,php经过memcache::addserver来实现该机制,它实现了若是服务器列表中的一台down掉的时候在参数retry_interval指定的时间就不会再链接该服务器的机制。因此只要你在该时间段内重启或者修复了该服务器,则不会对前端形成太大的影响。固然了,若是你一直不去重启该服务器的话,我测试过addserver再次链接一台down掉的服务器的时间将比平时延长了1秒的时间。能够经过addserver的最后一个参数failure_callback定义一个回调函数来实现邮件通知或者短信通知管理员的功能。
若是是手工重启,我建议将该值设置为20分钟。不过对于memcached进程死掉的服务器,只要从新启动memcached,就能够正常运行,因此采用了监视memcached进程并自动启动的方法的效果最好。mixi推荐的工具:nagios,daemontool前端
【应用策略】
memcached主要的做用是为减轻大访问量对数据库的冲击,因此通常的逻辑是首先从memcached中读取数据,若是没有就从数据库中读取数据写入到memcache中,等下一次读取的时候就能够从memcached中读取了。但在项目中的具体应用策略(也就是哪些数据应该缓存?怎么样缓存?过时策略?)就是个问题了。它的一个总原则是将常常须要从数据库读取的数据缓存在memcached中。这些数据也分为几类:ios
1、常常被读取而且实时性要求不强能够等到自动过时的数据。例如网站首页最新文章列表、某某排行等数据。也就是虽然新数据产生了,但对用户体验不会产生任何影响的场景。
这类数据就使用典型的缓存策略,设置一过合理的过时时间,当数据过时之后再从数据库中读取。固然你得制定一个缓存清除策略,便于编辑或者其它人员能立刻看到效果。数据库
2、常常被读取而且实时性要求强的数据。好比用户的好友列表,用户文章列表,用户阅读记录等。
这类数据首先被载入到memcached中,当发生更改(添加、修改、删除)时就清除缓存。在缓存的时候,我将查询的SQL语句md5()获得它的hash值做为key,结果数组做为值写入memcached,而且将该SQL涉及的table_name以及hash值配对存入memcached中。当更改了这个表时,我就将与此表相配对的key的缓存所有删除。数组
3、统计类缓存,好比文章浏览数、网站PV等
此类缓存是将在数据库的中来累加的数据放在memcached来累加。获取也经过memcached来获取。但这样就产生了一个问题,若是memcached服务器down掉的话这些数据就有可能丢失,因此通常使用memcached的永固性存储,这方面咱们新浪使用memcachedb。缓存
4、活跃用户的基本信息或者某篇热门文章。
此类数据的一个特色就是数据都是一行,也就是一个一维数组,当数据被update时(好比修改昵称、文章的评论数),在更改数据库数据的同时,使用Memcache::replace替换掉缓存里的数据。这样就有效了避免了再次查询数据库。服务器
6、session数据
使用memcached来存储session的效率是最高的。memcached自己也是很是稳定的,不太用担忧它会忽然down掉引发session数据的丢失,即便丢失就从新登陆了,也没啥。见[多服务器session共享之memcache共享]session
【总结】
经过以上的策略数据库的压力将会被大大减轻。检验你使用memcached是否得当的方法是查看memcached的命中率。有些策略好的网站的命中率能够到达到90%以上。分布式
【后记】
1、memcached暂时还不支持故障转移,但愿在之后的版本中能支持该功能。固然你可使用日本人平林幹雄的Tokyo Tyrant 来代替memcached,它支持memcached协议,支持永固性存储和故障转移。但我没有在生产环境中使用过,也没有相关的性能测试数据。之后会试用一下这个东东。
2、memcached不支持检索的功能,在实际使用中好比咱们想把一个IP表放在memcached中,来检索某一个IP属于那个地区的话,有了检索功能就方便多了。但愿他在之后的版本中能提供该功能。暂时能够经过排序存储和二分法在客户端实现。
3、memcached1.2.2版本确实有不稳定的状况,有时候会出现DOWN机,强烈建议升级至1.2.6的版本。见官方说明:Version 1.2.6 released. Major crash fixes, DTrace support, minor updates. If you have stability issues with any previous release, please upgrade to this one.memcached