MC的一些具体的应用的例子的总结

任何东西,都有其适用的场景,在合适的场景下,才能发挥好更大的作用。

对于memcached,使用内存来存取数据,一般情况下,速度比直接从数据库和文件系统读取要快的多。

memcached的最常用的场景就是利用其“读取快”来白虎数据库,防止频率读取数据库,也有的项目中,;利用其“存储快”的特点来实现主从数据库的消息同步

1.缓存数据库的查询结果:

通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性

伪代码及效果如下:

 1 <?php
 2 $sql='select goods_id,goods_name from ecs_goods where is_hot=1 limit 5';
 3 //判断memcached中是否缓存热门商品,如果没有,则查询数据库
 4 $hot=array();
 5 if(!($hot=$memcache->get($sql))){
 6 $hot=$mysql->getAll($sql);
 7 echo'<fontcolor="red">查询自数据库</font>';
 8 //从数据库取得数据后,把数据写入memcached
 9 $memcache->add($sql,$hot,0,300);//并设置有效期300秒
10 }else{
11 echo'<fontcolor="red">查询自memcached</font>';
12 }
13 ?>

2.中继MySQL主从延迟数据:

MySQL在做replication的时候,主从复制之间必然姚经理一个复制过程,即主从延迟的时间。

尤其是主从服务器处于异地机房的时候,这种情况更加的明显。

以我们 的情况为例:公司内部小机房的数据需要同步到北显机房,那数据量特别大的时候,主从的延时能达到1个多小时,那幸好数据的要求并没有那么的实时,但我们可以采用如下的方法,先考虑一个场景:

 1 ①: 用户U购买电子书B,insert into Master(U,B);
 2 ②: 用户U观看电子书B,select 购买记录[user=’A’,book=’B’] from Slave.
 3 ③: 由于主从延迟,第②步中无记录,用户无权观看该书.
 4 
 5 这时,可以利用memached在master与slave之间做过渡
 6 
 7 ①: 用户U购买电子书B,memcached->add(‘U:B’,true)
 8 
 9 ②: 主数据库insert into Master(U,B);
10 
11 ③: 用户U观看电子书B,select 购买记录[user=’U’,book=’B’] from Slave.
12 如果没查询到,则memcached->get(‘U:B’),查到则说明已购买但Slave延迟.
13 
14 ④: 由于主从延迟,第②步中无记录,用户无权观看该书.

 

转载于:https://www.cnblogs.com/shangzekai/p/4698837.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值