Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。Memcache官方网站:http://www.danga.com/memcached,更多详细的信息可以来这里了解。
为什么会有Memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
memcache是PHP的一个PECL库插件,这个插件的作用,就是提供一个界面,通过PHP来使用一个功能为“内存缓存的过程式程序”的程序,这个程序就叫memcached。
有点绕口,就是说,memcached是一个软件,而memcache是一个PHP的接口,这个接口使PHP程序代码能够操作和使用memcached这个软件。
Memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储。
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。
环境:
windows 7(64位);
php-5.5.12;
第一步:memcached客户端的安装
http://download.csdn.net/detail/zsjangel/7104727
下载完成后,解压(我用的是 64位的),进入 DOS 命令行
先 cd 到解压后的目录 例如:切换到C://wamp/www/memcached
然后执行服务注册命令
memcached.exe -d install
卸载服务命令memcached.exe -d uninstall
然后启动服务memcached.exe -d start
停止服务memcached.exe -d stop
第二步:memcache服务器端的安装
http://download.csdn.net/detail/zsjangel/7104749
下载的时候需要注意一下版本号问题,用phpinfo()函数查看当前PHP版本的信息:
所以我用的是:php5.5-ts-vc11-x86
安装扩展
将下载下来的压缩包解压,然后将 php_memcache.dll模块拷贝到PHP的ext文件夹内。
修改php.ini文件//C:\wamp\bin\apache\apache2.4.9\bin
引入如下代码
extension=php_memcache.dll测试
重启web服务器。
使用phpinfo()函数查看:
在memcache.php文件中输入如下代码:
$memcache
->connect(
"127.0.0.1"
, 11211);//此处第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的端口(默认是11211):
在浏览器中进行测试,这里需要注意的是memcache服务必需在启动状态下
写个简单的实例测试:
<?php
$mem = new Memcache;
$mem->connect('127.0.0.1',11211);
$mem->set('key','hello memcache!');
$out = $mem->get('key');
$mem->set('key1','This is first value',0,60);
$val = $mem->get('key1');
echo $val."<br/>";
//替换数据
$mem->replace('key1','This is replace value',0,60);
$val = $mem->get('key1');
echo $val."<br/>";
//保存数组
$arr = array('aa','bb','cc','dd');
$mem->set('key2',$arr,0,60);
$val = $mem->get('key2');
var_dump($val);echo "<br/>";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo $val."<br/>";
//清楚所有数据
$mem->flush();
$val = $mem->get('key2');
var_dump($val);echo "<br/>";
$mem->close();
?>