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

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

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

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

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

伪代码及效果如下:

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

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

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

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

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

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

最新文章

  1. SVN Unable to connect to a repository at UR
  2. java 打印出99乘法口诀表
  3. SharePoint 2013 Nintex Workflow 工作流帮助(二)
  4. UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
  5. C# 使用Code First迁移更新数据库
  6. java中list、set和map 的区别
  7. ASP.NET导出EXCEl方法使用COM.EXCEL不使用EXCEl对象
  8. 滚动条加粗和panel,gridControl结合用
  9. JS-运动基础(一)
  10. java中面试可能会问的问题
  11. 奇偶个数-java
  12. 华为路由器 HDLC 实验
  13. noiac64 sort (二分答案)
  14. 【转】CSS颜色代码大全
  15. CentOS下iptables详解
  16. 多线程二:线程池(ThreadPool)
  17. UVALive 4174
  18. php-新特性,生成器的创建和使用
  19. HUE配置文件hue.ini 的impala模块详解(图文详解)(分HA集群)
  20. Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 03

热门文章

  1. c++语法随身记
  2. ES6 - promise对象
  3. JS(去掉前后空格或去掉所有空格)的用法 推荐使用jquery 方法
  4. JSBinding+SharpKit / 更新的原理
  5. Python字典实现三级菜单
  6. 一步步构建自己的AngularJS(2)——scope之$watch及$digest
  7. JQuery面试题答案
  8. ES(一): 架构及原理
  9. jquery获得图片的真实大小
  10. nova boot instance call flow