Memcached学习笔记之memcached应用场景举例
memcached应用场景举例
任何东西,都有其适用场景,在合适的场景下,才能发挥更好的作用。对于memcached,使用内存来存取数据,一般情况下,速度比直接从数据库和文件系统读取要快。
memcached的最常用场景是利用其“读取快”来保护数据库,防止高频率读取数据库。也有的项目中,利用其“存储快”的特点来实现主从数据库的消息同步。
1、缓存数据库查询结果###
通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性,如下图:

代码及效果如下:
include("PDO.class.php");
$sql = 'select Id,name,path,points from tj_gift where isopen=1 limit 3';
//判断memcached中是否缓存有热门商品,如果没有,则查询数据库
$hot = array();
$mem = new Memcache();
$mem->connect('localhost');
if(!($hot=$mem->get($sql))){
$hot = M()->q($sql);
echo "<pre>";
print_r($hot);
echo "</pre><br/>";
echo '<font color="red">查询自数据库</font>';
//从数据库中取得数据后,把数据写入memcached
$mem->add($sql,$hot,0,300); //设置有效期300秒
}else{
echo "<pre>";
print_r($hot);
echo "</pre><br/>";
echo '查询自memcached';
}
第一次查询:

再次查询:

2、中继MySQL主从延迟数据###
MySQL在做replication时,主从复制之间必然要经历一个复制过程,即主从延迟时间。尤其是主从服务器处于异地机房时,这种情况更加明显。facebook官方的一片技术文章描述,其加州的主数据中心到弗吉尼亚州的主从同步延期达到70ms;
考虑如下场景:
1、用户U购买电子书B,insert into Master(U,B);
2、用户U观看电子书B,select 购买记录[user='U',book='B'] from slave;
3、由于主从延迟,第二步中无记录,用户无权观看该书。
这是可以利用memcached在master和slave之间做过渡,如下图:
1、用户U购买电子书B,memcached->add('U:B',true);
2、主从数据库insert into Master (U,B);
3、用户U观看电子书B,select 购买记录[user='U',book='B'] from slave,如果没有查询到,则memcached->get('U:B'),查到则说明以购买但slave延迟;
4、由于主从延迟,第二步中无记录,用户无权查看该书。


浙公网安备 33010602011771号