实际应用中,尤其是在大规模访问的Web项目中,Memcache作为一种优秀的缓存解决方案,被广泛使用。其灵活性和可扩展性受到了广大开发者的青睐。为了提高响应速度,使用Memcache来减少数据查询运算是一种不错的选择。

关于Memcache的安装和配置,网上有很多资料,这里就不再赘述。本文以笔者在实际项目中的应用为例,来说明如何使用Memcache缓存MySQL数据,从而达到高效数据响应的目的。

需求背景:网站有一个图片放映功能,页面加载时需从数据库中查询管理员所提交放映的图片信息,图片放映区共有9张图片,对应在数据库表中有9条记录。每次用户访问网站时,需查询数据库,并显示图片。当承受大规模用户同时访问时,数据库的压力可想而之。

为了降低数据库压力,提高查询速度,我采用了Memcache来将图片记录信息缓存到Memcache服务器上。这样就将数据库的查询压力分散到了各缓存服务器,提高了网站访问的整体效率。

一、Memcache 服务器配置(内部集群模拟)

$MEMCACHE_SERVERS[] ='192.168.1.78:11211';

$MEMCACHE_SERVERS[] ='192.168.1.78:11212';

$MEMCACHE_SERVERS[] ='192.168.1.252:11211';

$MEMCACHE_SERVERS[] ='192.168.1.252:11212';

//如果要添加Memcache节点,就在此处添加即可。

$MEMCACHE_LIFETIME= 6000;// 缓存数据生命周期

我采用了两台机器作为Memcache Server,每台开启两个端口提供Memcache服务,每个服务开启服务内存为1G。这样,缓存空间总的有4G。

二、php连接Memcache服务器

php中和Memcache的交互有两种:1、采用php下的memcache扩展;2、采用libmemcache组件。两者的优劣在此先不作对比。

$_SGLOBAL['memcache'] =newmemcache;

global$MEMCACHE_SERVERS;

$result=array();

foreach($MEMCACHE_SERVERSas$server){

$serverstr=explode(':',$server);

$host=$serverstr[0];

$port=$serverstr[1];

$_SGLOBAL['memcache']->addServer($host,$port);

}

这段程序从刚刚的memcache服务器配置文件中读取所有的server列表,并创立连接。

三、php实现memcache和mysql的缓存查询

实现原理其实很简单,在我的数据库操作类中新增一个函数query_memcache($sql,$type),以$sql的MD5值作为Key,从 Memcache服务器上查询是否存在该key的值,如果存在,则直接返回;如果不存在,则从MySQL数据库中查询,并将结果写入Memcache。

functionquery_memcache($sql,$type=''){

$key= md5($sql);

if(!($value=$_SGLOBAL['memcache']->get($key))){//Cache中没有,则从My SQL中查询

$query=$this->query($sql,$type);

while($item=$this->fetch_array($query)){

$result[] =$item;

}

$value=$result;

//将Key和Value写入MemCache

$_SGLOBAL['memcache']->set($key,$result,0,$MEMCACHE_LIFETIME);

}

return$value;

}

在页面加载的过程中,将图片检索的数据库查询调用改成用query_memcache()函数即可。

到此,我们就实现了用Memcache缓存首页数据信息,经测试,在大规模的并发访问下,首页加载速度快了许多。

用计时器测试单台客户端访问响应时间如下:

(红线框内的是第一次从数据库中读取数据的耗时,当数据存入Memcache后,读取数据耗时更短【蓝线框的数据】)

原帖地址:http://blog.csdn.net/kangqing2003/article/details/6202733

mysql和memcache 查询_使用Memcache缓存MySQL查询(转载)相关推荐

  1. mysql 关联查询_响应时间长?MySQL查询优化教程来了!

    - 点击上方"爱数据学习社"关注我们吧! - 为什么查询会慢?--响应时间过长. 如果把查询看做是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询, ...

  2. mysql like带字符串_(转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的字符串相匹配,则符合查询条件,该记录将被查询出来. 如果与指定的字符串不匹配,则不符合查询条件. ...

  3. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表

    展开全部 查询32313133353236313431303231363533e59b9ee7ad9431333431356639一个数据库中的所有表sql语句是show tables: 显示所有数据 ...

  4. python循环次数查询_大数据量Mysql查询后经过循环使用python分片

    1 问题描述: (1)使用mysql查询基础数据,这里只有三四个基础的查询条件,联了一个表,同时有limit分页了: (2)之后经过一系列逻辑处理,在这些处理中又包含了很多sql查询,而且是在第(1) ...

  5. mysql带有in的子查询_含有IN的子查询

    本文主要探讨MySQL5.5和MYSQL5.6对包含in子查询的优化情况. MySQL5.5 首先来看一下,在MySQL5.5及以下版本是如何处理的,比如下面这条语句: select name fro ...

  6. mysql不同服务器查询_实战操作SQL Server连接查询不同服务器表数据

    今日产品部要导批数据,但是需要连接查询查询的几个表不在同一服务器上.所以我开始是这么干的: 1.查询一台服务器的数据,并导入本地Excel 2.查询另一台服务器的数据,并导入本地Excel 3.Exc ...

  7. mysql读写分离实现_脱离开发:Mysql读写分离方案之一

    案例:Mysql读写分离 技能目标: · 熟悉MySQL主从复制原理 · 熟悉MySQL读写分离原理 · 学会配置MySQL主从复制 · 学会配置MySQL读写分离 6.1 案例分析 6.1.1 案例 ...

  8. mysql可扩展数据库_五大技巧提高MySQL可扩展性

    当网站上部署小型MySQL数据库时,面对少量访客的情况下,快慢的查询都足够快,能够提供足够的性能.因此,没有必要进一步的优化查询.然而,随着大量数据(几十万行量级)的出现,网站大量游客访问时,速度在毫 ...

  9. amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离

    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...

  10. golang mysql连接池原理_[Go] golang实现mysql连接池

    golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连 ...

最新文章

  1. 用Transformer完全替代CNN?
  2. 几个简单java基础的例子
  3. 1t硬盘怎么分区最好_网友问题解答:?最简单的方法教你电脑硬盘怎么分区?
  4. python中的os abort_Python::OS 模块 -- 进程管理
  5. iOS-FMDB 使用
  6. CentOS录屏快捷键
  7. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格渲染器和过滤器Mesh renderers and filters...
  8. Codeforces 15C Industrial Nim 简单的游戏
  9. 有什么好用的电脑录音软件?
  10. HHUOJ 1860 哆啦A梦的口袋
  11. apollo之集群部署(二)
  12. Mac 连接显示器,外接显示器不出影像
  13. 几个好中的计算机类EI源刊
  14. Python爬虫:盖楼抽奖还手动?自动的她不香吗?
  15. 为什么我星际争霸画面是窗口_为什么我喜欢看全球星际联盟
  16. mysql中约束由数字构成_MySQL 数据类型和约束(外键是重点)
  17. 计算机编程术语(中英文对照)
  18. 【CISSP备考】AIO综合错题集
  19. UIQ3.0模拟器上网和显示中文
  20. 语音转文字怎么设置在线转换的操作

热门文章

  1. Angular服务器端渲染
  2. IDE工具的[多行光标编辑模式]
  3. Hacker News 2018 年度报告出炉
  4. Active Directory证书服务
  5. 找到你真正喜欢做的事情,坚持下去,坚持多深入一些(转)
  6. makefile--编译出现,未定义的字符
  7. iphone 开发常用代码2
  8. ubuntu不能更新包
  9. 微信小程序的三级分销-项目表格设计
  10. 「开源资讯」Sentinel Go 0.4.0 发布,支持热点流量防护能力