为了工作需要,今天在windows7环境安装了下了memcached。
想要安装memcached需要三个步骤
1、安装memcached服务
在网上下载一个 memcached for windows。将其解压到一个目录,暂时称之为MEMECACHED_HOST。
在命令行下进入到MEMECACHED_HOST目录,然后执行memcached.exe -p 11211 -l 127.0.0.1,这样memcached就启动起来了。
如果不想每次使用memcached的时候都手动启动的话,可以把它安装为windows 服务。方法为memcached.exe -d install -p 11211 -l 127.0.0.1
应该就可以了。
2、下载php_memcached.dll
这个php_memcached.dll并不是php环境自带的。这个需要大家自己到互联网上自己下载。
需要注意的是php_memcached.dll必须和自己机器上php版本想对应的。如果不对应,就会出现memcached加载不成功的情况(我今天就是因为这个搞了很长时间。我php是5.2.12 下载的php_memcached.dll确实for php5.3的 。。。。。)。dll文件下载成功以后,解压缩到php的ext目录下面。如果apache的httpd.conf中没有设置PHPIniDir这个变量,估计需要把这个dll复制到system32目录下面(不太确定这个??)。
3、为php配memcached扩展
memcached服务器已经启动了,但是php还是不能连接这个服务。因为,我们还没有为php配置memcached扩展。
打开php.ini(确保是php加载的按个ini文件)添加一行
extension=php_memcache.dll
如果你php.ini已经有这个扩展那就不需要咱添加了。如果extension=php_memcache.dll签名有个“;”则需要把这个“;”去掉
所有上面三步都做完之后, 重启apache。
重启好apache 以后看看phpinfo的输出结果。
如果有memcached 这项输出,说明memcached扩展已经添加成功。
(
如果没有就表明memcached还有什么地方没有正确配置。那就需要再好好看看上面三步哪个地方出漏子了。 这个就需要大家自己好好看看了。真不行的话
就google吧。
)
memcached环境配好了。
万事俱备只欠东风。现在写一个小程序看看memcached是不是好用吧!
1
<?
php
2
$memcache
=
new
Memcache;
//
创建一个memcache对象
3
$memcache
->
connect(
'
localhost
'
,
11211
) or
die
(
"
Could not connect
"
);
//
连接Memcached服务器
4
$memcache
->
set(
'
key
'
,
'
test
'
);
//
设置一个变量到内存中,名称是key 值是test
5
$get_value
=
$memcache
->
get(
'
key
'
);
//
从内存中取出key的值
6
echo
$get_value
;
代码范例(来自chinaunix):
PHP代码
- <?php
-
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
- if($s=$memcache->get(’a’)) {
- $s=$s+1;
- $memcache->set(’a’,$s);
- }
- else
- $memcache->set(’a’,1);
- echo ’访问结果为:’.$s;
- ?>
等效
PHP代码
- <?php
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
-
- if($s=$memcache->increment(’a’,1)) {
- echo $s;
- }
- else
- $memcache->set(’a’,1);
- ?>
数据压缩
PHP代码
- <?php
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
- $test=(str_repeat(’jetwong’,100000));
- $memcache->set(’b’,($test));
- ?>
- 使用压缩:
- <?php
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
- $test=(str_repeat(’jetwong’,100000));
- $memcache->set(’b’,($test),MEMCACHE_COMPRESSED);
- ?>
内存的更新清理
PHP代码
- <?php
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
-
-
- $status = $memcache->getStats();
- echo ’设置前内存使用情况’.$status[’bytes’].’<br>’;
- echo ’设置后’;
- for($i=0;$i<9;$i++) {
- $memcache->set(’b’.$i,rand(1,99));
- echo ’<br>’.$i.’->’.$memcache->get(’b’.$i);
- }
-
-
- $status = $memcache->getStats();
- echo ’delete前内存使用情况’.$status[’bytes’].’<br>’;
- echo ’<br>开始delete’;
- for($i=0;$i<9;$i++) {
- $memcache->delete(’b’.$i);
- echo ’<br>’.$i.’->’.$memcache->get(’b’.$i);
- }
-
-
- $status = $memcache->getStats();
- echo ’使用flush前内存使用情况’.$status[’bytes’].’<br>’;
- echo ’使用flush情况:’;
- for($i=0;$i<9;$i++) {
- $memcache->set(’b’.$i,rand(1,99));
- echo ’<br>’.$i.’->’.$memcache->get(’b’.$i);
- }
- $memcache->flush();
- echo ’flush之后:’;
- for($i=0;$i<9;$i++) {
- echo ’<br>’.$i.’->’.$memcache->get(’b’.$i);
- }
- $status = $memcache->getStats();
- echo ’flush后内存使用情况’.$status[’bytes’].’<br>’;
- ?>
内存超量测试
PHP代码
- <?php
- $memcache = new Memcache;
- $memcache->connect(’localhost’, 11211) or die ("Could not connect");
-
-
- $test1= str_repeat(’jetlee’,100000);
-
- $test2= str_repeat(’jetlee’,100000);
-
- $test3= str_repeat(’李连杰’,200000);
-
- $test4= str_repeat(’连杰李’,100000);
-
- $test5= file_get_contents(’http:
- $test6= file_get_contents(’http:
-
- for($i=1;$i<=6;$i++) {
- $j=’test’.$i;
- if($memcache->set($j,$$j)) {
- echo $j.’->设置成功<br>’;
- $status = $memcache->getStats();
- echo ’内存:’.$status[’bytes’].’<br>’;
- }
- else {
- echo $j.’->设置失败<br>’;
- }
- }
- ?>
总结
PHP代码
- <?
-
- if($data = $memcache->get(’k’,$v)) {
-
- }
- else {
- $data = get_from_database;
- if(!$memcache->set(’k’,$data), MEMCACHE_COMPRESSED)
- log();
- }
- ?>
再次强调下:php_memcached.dll必须是和php版本相匹配的。否则,可能会出现memcached的扩展加载不成功的情况。
如果想了解memcached命令及其意思,可以直接在进入到MEMCACHED_HOST下输入memcached -h 就会把所有的命令及其解释
都显示出来。。
参考:http://jxxms.javaeye.com/blog/804676
http://apps.hi.baidu.com/share/detail/5634652
http://www.jzxue.com/fuwuqi/http-iis-apache/200908/15-2496_2.html
http://wenku.baidu.com/view/fcb5770bf78a6529647d534b.html
http://jxxms.javaeye.com/blog/804676
http://www.cnblogs.com/analyzer/articles/1581957.html