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、由于主从延迟,第二步中无记录,用户无权查看该书。

posted @ 2017-02-22 15:59  FullStackMe  阅读(141)  评论(0)    收藏  举报