合理使用Memcached进行缓存部署

来源:互联网 发布:诺基亚e72i软件下载 编辑:程序博客网 时间:2024/05/01 04:41

 原贴:http://www.hlddn.com/diary/122.html

合理使用Memcached进行缓存部署

     使用Memcached来缓存数据是目前最有效的方案,使用Memcached能够有效的降低MySQL的查询压力。Memcached工作的原理是将MySQL查询出来的结果存储在内存中,下次查询时可以避开MySQL,以此来降低数据库的压力。但是现在的社区网站中,数据的更新十分频繁,这也给数据缓存带来了不小的难度。如果缓存的更新时间设计不合理,用户不能在数据修改的第一时间看到结果;过于频繁的更新又会丧失缓存的功能。

在万蝶最原始的缓存策略中,我们采用的是:默认数据缓存1天时间,如果期间数据有更新,在更新的同时删除原有的缓存然后重新查询数据库并缓存新数据,如果没有没有更新,缓存数据1天后自动过期,下次查询经过数据库后重新缓存。这样的设计方案保证了数据的及时性,用户的更新在第一时间呈现出来,但是弊端是过于频繁的更新不但没有起到降低数据库压力的要求,同时也给Memcached自身带来一定的压力。

我们向数据库中插入一条数据,之后在需要的时候再从数据库中把这条数据提取出来,我们好像是在刻意给数据库增加压力?如果我们在把数据插入数据库的同时,也把这条数据同时让Memecached保存起来呢?这样,在需要查询的时候我们就可以直接从Memcached中得到这条数据了,查询避开MySQL,这样可以将数据库的压力将到最低。

下一步我们要考虑的就是在数据发生更新时候的操作了,这个时候就该Memcache::replace上场了。在pdx中,更新最频繁的就是用户的网志了,每一次的阅读,每一次的评论,数据都需要更新,但是每次更新的也只是数据中的一部分,所以这种情况下,我们只需要将Memcached中的数据提取出来,将需要更新的部分替换掉,然后使用Memcache::replace替换掉老的缓存,这样我们的需求就基本达到了:查询避开了数据库,有效的减轻了数据库压力;同时我们又在数据修改的第一时间让用户看到了更新。

 

原创粉丝点击