`
wb284551926
  • 浏览: 538917 次
文章分类
社区版块
存档分类
最新评论

使用Memcache缓存MySQL查询(转载)

 
阅读更多

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

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

 

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

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

 

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

   

  1. $MEMCACHE_SERVERS[] = '192.168.1.78:11211';  
  2.     $MEMCACHE_SERVERS[] = '192.168.1.78:11212';  
  3.     $MEMCACHE_SERVERS[] = '192.168.1.252:11211';  
  4.     $MEMCACHE_SERVERS[] = '192.168.1.252:11212';  
  5.     //如果要添加Memcache节点,就在此处添加即可。  
  6.       
  7.     $MEMCACHE_LIFETIME = 6000;   // 缓存数据生命周期  

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

   二、php连接Memcache服务器

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

  

  1. $_SGLOBAL['memcache'] = new memcache;  
  2. global $MEMCACHE_SERVERS;  
  3. $result = array();  
  4. foreach ($MEMCACHE_SERVERS as $server){  
  5.         $serverstr = explode(':',$server);  
  6.     $host = $serverstr[0];  
  7.     $port = $serverstr[1];  
  8.          
  9.         $_SGLOBAL['memcache']->addServer($host,$port);  
  10. }   

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

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

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

  

  1. function query_memcache($sql,$type=''){  
  2.         $key = md5($sql);  
  3.           
  4.         if(!($value = $_SGLOBAL['memcache']->get($key))){ //Cache中没有,则从My SQL中查询  
  5.             $query = $this->query($sql,$type);  
  6.             while($item = $this->fetch_array($query)){  
  7.                 $result[] = $item;  
  8.             }  
  9.             $value = $result;  
  10.               
  11.             //将Key和Value写入MemCache  
  12.             $_SGLOBAL['memcache']->set($key,$result,0,$MEMCACHE_LIFETIME);  
  13.         }  
  14.         return $value;  
  15.     }  

 

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

 

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

 

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

 

  

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

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

分享到:
评论

相关推荐

    使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

    主要介绍了使用Memcache缓存mysql数据库操作的原理和缓存过程浅析,本文着重点在Memcache和MySQL数据库的交互过程及流程分解,需要的朋友可以参考下

    清空mysql 查询缓存的可行方法

    您可能感兴趣的文章:MySQL优化之缓存优化mysql的查询缓存说明使用Memcache缓存mysql数据库操作的原理和缓存过程浅析浅析MySQL内存的使用说明(全局缓存+线程缓存)MySQL高速缓存启动方法及参数详解(query_cache_...

    php从memcache读取数据再批量写入mysql的方法

    本文实例讲述了php从memcache读取数据再批量写入mysql的方法。分享给大家供大家参考。具体分析如下: 用 Memcache 可以缓解 php和数据库压力下面代码是解决高负载下数据库写入瓶颈问题,遇到最实用的:写入ip pv uv的...

    一个MySQL数据库操作类,支持连贯操作,查询结果自动进行缓存管理

    今天刚做的一个MySQL操作类,基本功能已经完成,支持连贯操作,支持基本的增改删差,查询条件和数据插入支持数组方式。自动缓存管理,可以选择文件缓存,或者memcache(也可以很方便的扩展其他缓存方式)。 使用...

    Discuz!下Memcache缓存实现方法

    同时给出一些使用Memcache去减轻MySQL压力的建议。其中很多数据是个人测试的结果,如有不同意见,敬请留言告之。另外由于个人思维的问题,行文比较跳跃,特此声明! 系统分析:单纯的从MySQL的角度出发,单台MySQL的...

    64位windows系统下安装Memcache缓存

    1、安装PHP、Mysql以及Apache,这边环境我就不用多做介绍了,一键环境有很多,几乎不影响Memcache。(我自己的调试环境是PHPStudy) 2、下载安装Memcache,我这里下载的是64位版本。  下载地址:...

    同步MySQL数据库增量变化fountain.zip

    缓存失效:数据变化收敛到MySQL,利用增量变化触发memcache或者redis缓存失效。数据监控:监控数据库中的异常数据,攻击行为数据。 历史操作记录:数据库业务变化,同步到另外的数据库表,供查询操作记录 其他你所...

    Typecho缓存插件-TpCache-0.7

    Typecho博客缓存插件,支持Memcached、Memcache、Redis、Mysql缓存,设置简单。解压改名为TpCache上传,后台开启即可!服务器需要开启相应的php缓存组件

    高洛峰 memcache for window 和linux版软件及教程

    Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统。通过在内存里维护一个巨大的hash表。 (key=value) Hash表 key value mystr “abc” myarr Array(“aa”, “cc”); object Object值 ...

    crud-service:基本的rubysinatra CRUD服务gem,使用MySQL和可选的memcache

    一个空的Sinatra应用程序班级达尔Dal实例为特定MySQL表提供DAL层,包括使用密钥有效期通过Memcached缓存进行的可选写操作。 要使用CrudService::Dal ,请扩展类并为您自己的数据库模式添加配置,如下所示: class ...

    Lagged_Session_SaveHandler_Memcache:用于会话的基于 Memcached 和 MySQL 的直写缓存

    这是具有 MySQL 持久性的 Zend Framework 的 Memcache 会话处理程序。 每次请求会话信息时,它都会首先询问 Memcached 并从 MySQL 读取作为故障转移。 数据写入 Memcached 和 MySQL。 对 MySQL 的写入是异步的...

    mysql实现本地keyvalue数据库缓存示例

    Key-Value缓存有很多,用的较多的是memcache、redis,他们都是以独立服务的形式运行,在工作中有时需要嵌入一个本地的key-value缓存,当然已经有LevelDb等,但感觉还是太重量级了。 本文实现了一种超级轻量的缓存, ...

    Easytalk博客系统代码审计.docx

    代码审计练习,从本地搭建环境到详细代码审计步骤再到漏洞验证一条龙。EasyTalk是国内首款多用户PHP+Mysql开源微博客系统,支持网页...系统内使用Memcache对数据查询进行高效的缓存,足可以满足大访问量、高并发的请求

    MySQL HandlerSocket插件安装配置教程

    目前使用MySQL的网站,多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无形中让Memcache成为故障的根源:Memcache数据一致性的问题:当MySQL数据变化后,如果不...

    DebianLNMP加强版一键安装包Debian6配置Nginx PHP5.3 MySQL最快最新

    更多相关使用说明:*DebianLNMP一键安装包Debian6系统下的Nginx/PHP5.3/MySQL最快最新http://jimmyli.jimmyli.blog.51cto.com/3190309/1060839 *两条命令Debian6一键安装包DebianLNMP最快.最新.最省!...

    CacheBundle:Symfony2捆绑包,用于内存缓存和其他缓存接口

    而且它还应与Amazon ElasticCache以及MySQL Memcache Interface(MySQL 5.6中的新功能)一起使用。 与仅使用原始内存缓存对象相比,另一个优势是BCB在将服务器添加到池之前先对其进行探测-如果服务器关闭,则您的...

    CmlPHP 2.7.1.zip

    CmlPHP是一个免费的遵循apache协议的全能型php开源框架,基于php5.3 版本(已经测试过php7)开发的MVC/HMVC/MVSC/HMVSC框架,支持composer、分布式数据库、分布式缓存,支持文件...用于子查询orm mysql支持强制使用某索引

    杨他他简约文章CMS带文章采集功能

    此版本为开源版,支持PHP5.4-7.0、mysql5.0以上,支持memcache缓存,支持rewrite伪静态。 程序内置一个文章采集器,可批量采集文章,采集时自动记录本次采集的页码,方便下次接着继续采集。 采集的文章入库时分别...

Global site tag (gtag.js) - Google Analytics