1.PHP安装MemCache扩展
下载扩展
PHP默认是不带memcache扩展的,所以要使用首先要去官方网站下载扩展。
官方网站:http://pecl.php.net/package/memcache/3.0.8/windows
这里有一个问题,我的系统是64位的应该选择X64,X64下载之后却无法成功配置,选择X86却没有问题
下载完成后解压,将里面的dll文件放入PHP扩展目录下。
配置PHP
打开php.ini文件,添加extension=php_memcache.dll。
重启服务器
查看安装结果
可以使用phpinfo()确认是否安装成功,如果找到mencache表示安装成功。
2.连接memcache服务器
这里和接下来的使用部分主要介绍面向对象的方法。
1 <?php2 ????$memca=new Memcache;//实例化一个memcache对象3 ????$memca->connect(‘127.0.0.1‘,11211);//使用ip地址,和端口号的方式连接4 5 ????$memca->close();//使用完毕记得释放资源6 ?>
在连接之前不要忘了开启memchache服务,具体可以参考上一篇博客。
3.使用memcache
添加数据
1 <?php 2 ????$memca=new Memcache; 3 ????if(!$memca->connect(‘127.0.0.1‘,11211)) exit(‘连接失败‘); 4 ?5 ????$memca->add(‘v1‘,‘this is test‘,null,0);//添加一条名为v1值为字符串的数据,存储时间为永久 6 ?7 ????$arr=array(‘aaa‘,‘bbbb‘,‘ccc‘); 8 ????$memca->add(‘v2‘,$arr,null,24*60*60);//添加一个数组,同理,对象也可以添加,存储时间为一天 9 10 11 ????class test12 ????{13 ????????public function a(){}14 ????}15 ????$ob=new test;16 ????$memca->add(‘v3‘,$ob,MEMCACHE_COMPRESSED);//存储一个对象,使用第三各参数,当数据过长是会进行压缩17 18 ????$memca->set(‘v4‘,123);//如果数据不存在就添加,存在则修改,这里成功添加19 ????$memca->set(‘v1‘,123);//这里修改v120 21 ????$memca->close();22 ?>
取出数据
1 <?php 2 ????$memca=new Memcache; 3 ????if(!$memca->connect(‘127.0.0.1‘,11211)) exit(‘连接失败‘); 4 ?5 ????/*分别获取v1 v2 v3*/ 6 ????echo $memca->get(‘v1‘);echo "<br>"; 7 ????var_dump($memca->get(‘v2‘));echo "<br>"; 8 ????var_dump($memca->get(‘v3‘));echo "<br>"; 9 10 ????/*一次性获取v1 v2 v3 以关联数组的形式返回*/11 ????var_dump($memca->get(array(‘v1‘,‘v2‘,‘v3‘)));echo "<br>";12 13 ????$memca->close();14 ?>
删除数据
1 <?php 2 ????$memca=new Memcache; 3 ????if(!$memca->connect(‘127.0.0.1‘,11211)) exit(‘连接失败‘); 4 ?5 ????$memca->delete(‘v1‘,0);//立即删除v1,0是默认选项,这里可以不加 6 ?7 ????$memca->delete(‘v2‘,30);//30秒内删除 8 ?9 ????$memca->close();10 ?>
这里试了一下设置第二个参数为30,但是也是立即就删除,没有发现有什么不同
如果像删除所有数据可以使用
$memca->flush();//该方法并不是真的删除所有数据,只是是所有变量过期,内存中的内容改写
3.实例
假设有下面一个脚本,访问这个脚本时根据传入的id值,从表account中查找记录并返回。
1 <?php 2 ????try{ 3 ????????$pdo=new PDO(‘mysql:host=localhost;dbname=example‘,‘root‘,‘‘); 4 ?5 ????????$result=$pdo->query("SELECT * FROM account WHERE id={$_GET[‘id‘]}"); 6 ?7 ????????var_dump($result->fetch()); 8 ????} 9 ????catch(PDOException $e){10 ????????exit(‘数据库连接或操作失败‘);11 ????};12 ?>
这个代码没有任何逻辑上的问题,但是在网络上可能有很多客户端在并发的访问这个脚本,它们当中有很多传入的id值都是相同的。
对于每一个访问,脚本都是无差别处理:从数据库(数据存在硬盘中)中根据SQL语句读取数据-->将结果读入内存中再输出。
现在使用memcache只要加一条add操作和判断,如下
1 <?php 2 ????$id=$_GET[‘id‘]; 3 ?4 ????$memca=new Memcache; 5 ????$memca->connect(‘127.0.0.1‘,11211); 6 ?7 ????if($row=$memca->get($id))//判断memcahce中是否存在该id的值,如果存在则直接从内存中返回 8 ????{ 9 ????????var_dump($row);10 ????}11 ????else12 ????{13 ????????try{14 ????????????$pdo=new PDO(‘mysql:host=localhost;dbname=example‘,‘root‘,‘‘);15 ????????????$result=$pdo->query("SELECT * FROM account WHERE id=$id");16 17 ????????????if($result->rowCount()!=0)18 ????????????{19 ????????????????$row=$result->fetch();20 21 ????????????????$memca->add($id,$row);//将id为键,查询的结果为值存入memcache中22 23 ????????????????var_dump($row);echo "第一次查询";24 ????????????}25 ????????????else{26 ????????????????echo "没有记录";27 ????????????}28 ????????}29 ????????catch(PDOException $e){30 ????????????exit(‘数据库连接或操作失败‘);31 ????????};32 ????}33 ????$memca->close();34 ?>
这样一来,只要之前查询过这个id,那么记录将会直接从内存中获取,就不用连接数据库进行一系列操作了。
PHP连接和使用MemCache
原文地址:https://www.cnblogs.com/patermenkey/p/8284163.html