PHP Memcache的安装使用及与mysql交互实例

 

一、Memcache介绍

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。

Memcache模块是一个高效的守护进程,提供用与内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态Web程序时减少对数据库的访问。

 

二、Windows下memcache的安装
1.下载Memcache for win32

http://www.php100.com/html/download/tools/2010/0125/3857.html

2.下载php_memcache.dll(php 5.3.8 memcache 扩展dll)

http://hi.baidu.com/%E5%E2%E5%CB%C3%AB%C3%AB%B3%E6/blog/item/7612cf35a4425896a71e1267.html

(Note:注意你安装的PHP版本来下载相应的dll文件)

1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。

4.下载php_memcache.dll,请自己查找对应的php版本的文件(放在php/ext文件夹下)
5. 在php.ini 加入一行 ‘extension=php_memcache.dll’
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

 

三、如何监测memcache服务端的运行状况
•最新的memcache pecl中,新增了一个memcache.php,这个php文件可以用来方便的查看memcache的状况

•可以到这里下载源文件:http://livebookmark.net/memcachephp/memcachephp.zip

•配置详解

•1、设置用户名和密码

•define(‘ADMIN_USERNAME’,'memcache’); // Admin Username

define(‘ADMIN_PASSWORD’,'password’); // Admin Password

•2、配置服务器及其端口(支持检测多个主机的memcache)

•$MEMCACHE_SERVERS[] = ‘mymemcache-server1:11211′; // add more as an array
$MEMCACHE_SERVERS[] = ‘mymemcache-server2:11211′; // add more as an array

•更改为:$MEMCACHE_SERVERS[] = ‘127.0.0.1:11211′;
$MEMCACHE_SERVERS[] = ‘192.168.0.1:11211′;

 

四、写了一个和MySQL交互的小程序代码
<?php
header("Content-Type:text/html;charset=utf-8");
$db_user='root';
$db_passwd='';
$dsn="mysql:host=localhost;port=3306;dbname=test";

$memcachehost = '127.0.0.1';     //缓存服务器
$memcacheport = 11211;       //缓存服务器端口
$memcachelife = 0;        //缓存生命周期

$mem = new Memcache();       //实例化Memcache对象
$mem->connect($memcachehost, $memcacheport);    //$mem->connect(缓存主机,缓存端口)

try
{                                                            //异常捕捉
$pdo = new PDO($dsn, $db_user, $db_passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'", PDO::MYSQL_ATTR_USE_BUFFERED_QUERY   =>   true));
unset($db_user);
unset($db_passwd);    //释放变量,数据库安全策略
}
catch (PDOException $e)
{
echo $e->getMessage();
exit;
}

function query_memcache($sql){
global $mem,$memcachelife;
$key = md5($sql);

if(!($value = $mem->get($key))){ //Cache中没有,则从My SQL中查询  
  echo 11 . '<br />';
  $microtime1 = microtime();     //设置从数据库取之前的时间
  $query = query($sql); 
  while($item = mysql_fetch_array($query))
  { 
  $result[] = $item;
  }
  $value = $result;
  $microtime2 = microtime();     //设置从数据库取之后的时间
  //将Key和Value写入MemCache  
  $mem->set($key,$result,0,$memcachelife);
  $d_value = $microtime2 - $microtime1;  //返回一个时间差
}
else
{
  echo 22 . '<br />';
  $microtime3 = microtime();     //设置从memcache中取之前的时间
  $value = $mem->get($key);
  $microtime4 = microtime();     //设置从memcache中取之后的时间
  $d_value = $microtime4 - $microtime3;  //返回一个时间差
}

echo $d_value;
return $value;
}

function query($sql)
{
if('' == $sql)
{
  echo 'SQL语句错误:SQL语句为空';
}
$query = mysql_query($sql);
if(!$query)
{
  echo '错误的SQL语句';
}
return $query;
}

foreach(query_memcache("select * from test.memcache where value = 'CS133604225199978'") as $row)
{
   //echo $row[0].'-'.$row[1].'<br /><br />';
}

//$mem->flush();   //刷新缓存

五、利用时间差进行测试
现通过时间差测试
经过两种途径 1、从数据库中直接取出数据,在取数据之前设置一个时间戳,取数据之后设置一个时间戳,两个时间戳相减,返回一个时间差
2、从memcache内存中取出数据,在从内存中取数据之前设置一个时间戳,在取数据之后设置一个时间戳,两时间戳相减,返回一个时间差

在第一次运行程序时返得到的时间差是从数据库中取数据用的时间

以后再运行程序得到的时间差是从内存中去数据所用的时间

可以明显的看出来从数据库中取数据所用时间平均是从内存中取数据所用时间的 1000倍左右。
 
本文链接:http://www.xuega.com/guoyuanyuans/blog/article_168.html 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值