首先要注意自己的php版本要你所要下载的memcache扩展保持一致,如果在网上没有找到
http://museum.php.net/php5/ 可以到这个网址上找与自己php版本对应的pecl包,里面有对应的php_memcache.dll的文件
如果这上面找不到的话,就去google里搜索下,实在不行的话,就只有去网上下载源码包,使用vc6自己编译吧。注意最好是使用vc6,不然可能会出现问题。当然另一个方法就是换其它版本的php了。
我就是因为版本不对应,在配置完之后重启apache的时候,提示找不到指定模块
Memcached的安装步骤:
1.将memcached.exe放在C盘某个文件夹中,形如在c:\memcached\memcached.exe
2.在终端(也即cmd命令界面)下输入'c:\memcached\memcached.exe -d install'安装
3.再输入:'c:\memcached\memcached.exe -d start'启动。NOTE:以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.将php_memcache.dll文件放到PHP目录中的ext文件夹中
5.修改你的php.ini文件,在其末尾 加入一行'extension=php_memcache.dll’
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
Memcached.exe的基本设置参数:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
Memcache扩展使用方法:
$memcache=new Memcache;
$memcacher->connect('127.0.0.1', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)\n";
$get_result = $memcache->get('key');
echo "Data from the cache:\n";
var_dump($get_result);
?>
我们接下来说memcached和memcache区别
a.
网上说这个东西是一个c/s结构的软件。确实是
如果是c/s结构的话,那就说明必须有一个服务端和一个客户端
所以,server端的就是memcached,client端可以看作是php_memcache.dll
怎么说呢php_memcache.dll提供了一组函数,用来缓存,提取,删除缓存等一系列的操作,而通过这些函数,最终把数据是放到了安装有memcached服务的机器上,可以是本机,也可以是其它网络上的机器。
你可以做下这样的测试,只启用php_memcache.dll中的一些函数,对缓存进行操作,把memcached服务给停用一下,看是否能正常使用。这时候是无法使用的
所以,可以把memcached看作是服务端 php_memcached看作是客户端
b.
PECL里有两个Memcached的模块,
Memcache
和
Memcached
,目前大部分PHP环境里使用的是
Memcache
版本,这个版本释出的比
较早,是一个原生版本,与之对应的
Memcached
版本则是建立在
libmemcached
的基础上,所以说
Memcached
版本的功能更全一些。
memcached相当Memcache来说版本更新
1.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
2.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
3.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。
4.php的memcached与Memcache两个扩展都支持一致性hash算法,不过设置方法不太一样:
Memcache
5.Memcache支持数组作为KEY,Memcached只支持字符串作为KEY
最后给大家推荐一个小工具,叫memadmin是一个查看memcached服务器的一个小工具,很强大,是用php+jquery写的
附:
保存数据
向memcached保存数据的方法有
它们的使用方法都相同:
my $add = $memcached->add( '键', '值', '期限' );
my $replace = $memcached->replace( '键', '值', '期限' );
my $set = $memcached->set( '键', '值', '期限' );
向memcached保存数据时可以指定期限(秒)。不指定期限时,memcached按照LRU算法保存数据。 这三个方法的区别如下:
选项 |
说明 |
add |
仅当存储空间中不存在键相同的数据时才保存 |
replace |
仅当存储空间中存在键相同的数据时才保存 |
set |
与add和replace不同,无论何时都保存 |
获取数据
获取数据可以使用get和get_multi方法。
my $val = $memcached->get('键');
my $val = $memcached->get_multi('键1', '键2', '键3', '键4', '键5');
一次取得多条数据时使用get_multi。get_multi可以非同步地同时取得多个键值, 其速度要比循环调用get快数十倍。
删除数据
删除数据使用delete方法,不过它有个独特的功能。
$memcached->delete('键', '阻塞时间(秒)');
删除第一个参数指定的键的数据。第二个参数指定一个时间值,可以禁止使用同样的键保存新数据。 此功能可以用于防止缓存数据的不完整。但是要注意,
set函数忽视该阻塞,照常保存数据
增一和减一操作
可以将memcached上特定的键值作为计数器使用。
my $ret = $memcached->incr('键');
$memcached->add('键', 0) unless defined $ret;
增一和减一是原子操作,但未设置初始值时,不会自动赋成0。因此, 应当进行错误检查,必要时加入初始化操作。