`

memcache在大型网站的应用策略

 
阅读更多

【转】memcache在大型网站的应用策略

转自 http://blog.sina.com.cn/s/blog_5f53615f0100qdxc.html
 ,原文不知出处。

蓝色字是我的加重或是注解。

今天看完了日本人mixi写的“memcached全面剖析”的系列文章,结合我在项目中使用memcache的经验,再谈谈memcache在大型网站中的应用策略。

【部署策略】

基于memcached的slab和dump的内存管理方式,它产生的内存碎片比较少,不需要OS去做繁杂的内存回收,所以它对CPU的占用率那是相当的 低。所以建议将它跟占用CPU较高的WEB服务器一起使用来节省成本。当然如果你有大量的廉价PC,那用来专门做memcached服务器也不错。由于32位操作系统中,每个进程最多只能使用2GB内存,所以如果你有大内存的话,可以以daemon的方式启动两个以上的memcached服务,或者干脆用64位的CPU和OS。

【服务监控】

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中。这些数据也分为几类:

一、经常被读取并且实时性要求不强可以等到自动过期的数据。例如网站首页最新文章列表、某某排行等数据。也就是虽然新数据产生了,但对用户体验不会产生任何影响的场景。

这类数据就使用典型的缓存策略,设置一过合理的过期时间,当数据过期以后再从数据库中读取。当然你得制定一个缓存清除策略,便于编辑或者其它人员能马上看到效果。

二、经常被读取并且实时性要求强的数据。比如用户的好友列表,用户文章列表,用户阅读记录等。

这类数据首先被载入到memcached中,当发生更改(添加、修改、删除)时就清除缓存。在缓存的时候,我将查询的SQL语句md5()得到它的 hash值作为key,结果数组作为值写入memcached,并且将该SQL涉及的table_name以及hash值配对存入memcached中。 当更改了这个表时,我就将与此表相配对的key的缓存全部删除。

三、统计类缓存,比如文章浏览数、网站PV等

此类缓存是将在数据库的中来累加的数据放在memcached来累加。获取也通过memcached来获取。但这样就产生了一个问题,如果 memcached服务器down掉的话这些数据就有可能丢失,所以一般使用memcached的永固性存储,这方面我们新浪使用memcachedb。[PS:这是nosql的地盘了]

四、活跃用户的基本信息或者某篇热门文章。

此类数据的一个特点就是数据都是一行,也就是一个一维数组,当数据被update时(比如修改昵称、文章的评论数),在更改数据库数据的同时,使用Memcache::replace替换掉缓存里的数据。这样就有效了避免了再次查询数据库。

[PS:第五点哪去了?]

六、session数据

使用memcached来存储session的效率是最高的。memcached本身也是非常稳定的,不太用担心它会突然down掉引起session数据的丢失,即使丢失就重新登录了,也没啥。见[多服务器session共享之memcache共享 ]

【总结】

通过以上的策略数据库的压力将会被大大减轻。检验你使用memcached是否得当的方法是查看memcached的命中率。有些策略好的网站的命中率可以到达到90%以上。

【后记】

一、memcached暂时还不支持故障转移,希望在以后的版本中能支持该功能。当然你可以使用日本人平林幹雄的Tokyo Tyrant 来代替memcached,它支持memcached协议,支持永固性存储和故障转移[这个似乎并不是memcached本身语义该做的事情吧] 。但我没有在生产环境中使用过,也没有相关的性能测试数据。以后会试用一下这个东东。

二、memcached不支持检索的功能,在实际使用中比如我们想把一个IP表放在memcached中,来检索某一个IP属于那个地区的话,有了检索功能就方便多了。希望他在以后的版本中能提供该功能。暂时可以通过排序存储和二分法在客户端实现。

三、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.

分享到:
评论

相关推荐

    MemCache开发说明文档

    Memcache是danga的一个项目,最早是为LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。 使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一...

    memcache安装包,memcache

    memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问。

    MemCache对象缓存应用

    NULL 博文链接:https://godsend-jin.iteye.com/blog/2261307

    memcache实现网站全局计数器

    memcache实现网站全局计数器 xmemcache counter

    linux memcache应用

    linux 基本操作,memcache应用,主要用于WEB站点。

    memcache软件和+教程

    memcache软件和+教程memcache软件和+教程

    memcache1.2.1 for windows

    windows下memcache安装包 附带php扩展包

    memcache图形监控工具phpmemcache

    memcache图形监控工具phpmemcache,尽是一个PHP文件就可以实现对memcache的监控。 使用方法:本地测试监控机安装Apache或者下载XAMPP(Apache+MySQL+PHP+PERL),安装后把memcachephp.zip中的memcache.php文件放到...

    memcache

    将信息保持memcache中

    最新windows版php_memcache.dll和memcache.exe

    最新windows的memcache模块下载 这个模块是平和php5.3的,在我的windowsxp php5.3.5上安装成功 里面有两个php库,一个php_memcache.dll.vc6 和一个php_memcache.dll.vc9 另外一个windows的memcache.exe文件,都是网上...

    C语言memcache代码文档

    C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档

    Memcache完全剖析 最实用的Memcache文档

    Memcache就不用多介绍了,做开发的人都知道。 但要用得好,却并不是那么容易的事。 如果用得不好,反而得不偿失。 这篇文档短小精悍,囊括了使用过程中需要要注意的方方面面。值得一读。

    Redis和Memcache的区别总结

    4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10; 5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主...

    简单的memcache命令

    简单的memcache命令

    Memcache win32

    在命令行下安装Memcache,输入 ‘c:/memcached/memcached.exe -d install’。 3.启动Memcache,再输入: ‘c:/memcached/memcached.exe -d start’。 memcached将作为windows的一个服务每次开机时自动启动。这样...

    Erlang_Memcache.pdf

    Erlang_Memcache

    delphi memcache MemCache.0.2.0.zip

    MemCache.0.2.0.zip Memcached Client for Delphi 客户端调用类 MemCache.0.2.0.zip Show all LinksExternal links Memcached Project This project is a delphi unit which implements a thread safe client for ...

    在Linux下memcache安装配置文档

    在Linux下memcache安装配置文档,很详细的哦

    memcache安装包.zip

    memcache安装包,里面包含memcache以及依赖的libevent包,附有安装脚本说明以及验证方式!

    php的Memcache方法介绍及应用实例

    Memcache PHP 扩展将为访问缓存提供一个简单的应用程序接口 (API)。要使用缓存,需要调用 API 来确定先前是否已缓存了对象。如果已经缓存,只需检索该对象并继续进行处理。否则,转至数据库、获取必需的数据、将其...

Global site tag (gtag.js) - Google Analytics