实际应用中,尤其是在大规模访问的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'] = new memcache;
- global $MEMCACHE_SERVERS;
- $result = array();
- foreach ($MEMCACHE_SERVERS as $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。
- function query_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
相关推荐
主要介绍了使用Memcache缓存mysql数据库操作的原理和缓存过程浅析,本文着重点在Memcache和MySQL数据库的交互过程及流程分解,需要的朋友可以参考下
您可能感兴趣的文章:MySQL优化之缓存优化mysql的查询缓存说明使用Memcache缓存mysql数据库操作的原理和缓存过程浅析浅析MySQL内存的使用说明(全局缓存+线程缓存)MySQL高速缓存启动方法及参数详解(query_cache_...
本文实例讲述了php从memcache读取数据再批量写入mysql的方法。分享给大家供大家参考。具体分析如下: 用 Memcache 可以缓解 php和数据库压力下面代码是解决高负载下数据库写入瓶颈问题,遇到最实用的:写入ip pv uv的...
今天刚做的一个MySQL操作类,基本功能已经完成,支持连贯操作,支持基本的增改删差,查询条件和数据插入支持数组方式。自动缓存管理,可以选择文件缓存,或者memcache(也可以很方便的扩展其他缓存方式)。 使用...
同时给出一些使用Memcache去减轻MySQL压力的建议。其中很多数据是个人测试的结果,如有不同意见,敬请留言告之。另外由于个人思维的问题,行文比较跳跃,特此声明! 系统分析:单纯的从MySQL的角度出发,单台MySQL的...
1、安装PHP、Mysql以及Apache,这边环境我就不用多做介绍了,一键环境有很多,几乎不影响Memcache。(我自己的调试环境是PHPStudy) 2、下载安装Memcache,我这里下载的是64位版本。 下载地址:...
缓存失效:数据变化收敛到MySQL,利用增量变化触发memcache或者redis缓存失效。数据监控:监控数据库中的异常数据,攻击行为数据。 历史操作记录:数据库业务变化,同步到另外的数据库表,供查询操作记录 其他你所...
Typecho博客缓存插件,支持Memcached、Memcache、Redis、Mysql缓存,设置简单。解压改名为TpCache上传,后台开启即可!服务器需要开启相应的php缓存组件
Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统。通过在内存里维护一个巨大的hash表。 (key=value) Hash表 key value mystr “abc” myarr Array(“aa”, “cc”); object Object值 ...
一个空的Sinatra应用程序班级达尔Dal实例为特定MySQL表提供DAL层,包括使用密钥有效期通过Memcached缓存进行的可选写操作。 要使用CrudService::Dal ,请扩展类并为您自己的数据库模式添加配置,如下所示: class ...
这是具有 MySQL 持久性的 Zend Framework 的 Memcache 会话处理程序。 每次请求会话信息时,它都会首先询问 Memcached 并从 MySQL 读取作为故障转移。 数据写入 Memcached 和 MySQL。 对 MySQL 的写入是异步的...
Key-Value缓存有很多,用的较多的是memcache、redis,他们都是以独立服务的形式运行,在工作中有时需要嵌入一个本地的key-value缓存,当然已经有LevelDb等,但感觉还是太重量级了。 本文实现了一种超级轻量的缓存, ...
代码审计练习,从本地搭建环境到详细代码审计步骤再到漏洞验证一条龙。EasyTalk是国内首款多用户PHP+Mysql开源微博客系统,支持网页...系统内使用Memcache对数据查询进行高效的缓存,足可以满足大访问量、高并发的请求
目前使用MySQL的网站,多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无形中让Memcache成为故障的根源:Memcache数据一致性的问题:当MySQL数据变化后,如果不...
更多相关使用说明:*DebianLNMP一键安装包Debian6系统下的Nginx/PHP5.3/MySQL最快最新http://jimmyli.jimmyli.blog.51cto.com/3190309/1060839 *两条命令Debian6一键安装包DebianLNMP最快.最新.最省!...
而且它还应与Amazon ElasticCache以及MySQL Memcache Interface(MySQL 5.6中的新功能)一起使用。 与仅使用原始内存缓存对象相比,另一个优势是BCB在将服务器添加到池之前先对其进行探测-如果服务器关闭,则您的...
CmlPHP是一个免费的遵循apache协议的全能型php开源框架,基于php5.3 版本(已经测试过php7)开发的MVC/HMVC/MVSC/HMVSC框架,支持composer、分布式数据库、分布式缓存,支持文件...用于子查询orm mysql支持强制使用某索引
此版本为开源版,支持PHP5.4-7.0、mysql5.0以上,支持memcache缓存,支持rewrite伪静态。 程序内置一个文章采集器,可批量采集文章,采集时自动记录本次采集的页码,方便下次接着继续采集。 采集的文章入库时分别...