当前位置: 代码迷 >> PHP >> Memcached - PHP 装配&使用
  详细解决方案

Memcached - PHP 装配&使用

热度:1032   发布时间:2012-08-17 02:08:34.0
Memcached - PHP 安装&使用

下载Memcached:
http://danga.com/memcached/download.bml

安装:
下载安装libevent,已安装可跳过:
下载地址:http://www.monkey.org/~provos/libevent/

Memcached For PHP Module下载地址:
http://pecl.php.net/package/memcache
http://cn.php.net/manual/zh/ref.memcache.php

安装Memcached服务端

root@tonyvicky:# tar vxzf memcached-1.1.12.tar.gz
root@tonyvicky:# cd memcached-1.1.12
root@tonyvicky:# ./configure --prefix=/usr/local/memcached
root@tonyvicky:# make
root@tonyvicky:# make install

安装完毕重启服务:

root@tonyvicky:# cd /usr/local/memcached/bin
root@tonyvicky:# ./memcached -d -m 50 -p 11211 -u root



安装PHP模块

root@tonyvicky:# tar vxzf memcache-1.5.tgz
root@tonyvicky:# cd memcache-1.5
root@tonyvicky:# /usr/local/php/bin/phpize
root@tonyvicky:# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
root@tonyvicky:# make
root@tonyvicky:# make install

安装完后可能会有如下提示:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20050922/

修改php.ini

extension_dir = "./"

修改为:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922/"

添加一行:

extension=memcache.so


安装完毕,测试:

PHP代码

<?php?

? $memcache ?=? new ?Memcache;? //创建一个memcache对象 ?

? $memcache ->connect( 'localhost' ,?11211)? or ? die ?( "Could?not?connect" );? //连接Memcached服务器

? $memcache ->set( 'key' ,? 'test' );? //设置一个变量到内存中,名称是key?值是test ?

? $get_value ?=? $memcache ->get( 'key' );? //从内存中取出key的值 ??

? echo ? $get_value ;?

?>

Memcache的内定Function
connect(ip, port)
set(key, value)? 数据压缩:set(key, value,?MEMCACHE_COMPRESSED )
get(key)
increment , 同set(好像多了个计数功能,没试过)
getStats() 返回当前内存占用情况(return array) print_r($memcached->getStats());
flush? 清空内存占用.

代码范例(来自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 );??

}??

? /*查看flush使用的情况*/ ?

$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" );?? ?? //600K左右

? $test1 =? str_repeat (’jetlee’,100000);?? //600K左右 ??

$test2 =? str_repeat (’jetlee’,100000);?? //600K左右 ??

$test3 =? str_repeat (’李连杰’,200000);?? //600K左右 ?

$test4 =? str_repeat (’连杰李’,100000);?? //200K ?

$test5 =? file_get_contents (’http: //img.pconline.com.cn/images/photoblog/2988177/20068/4/1154688770042_mthumb.JPG’);

$test6 =? file_get_contents (’http: //img.pconline.com.cn/images/photoblog/1767557/20069/28/1159417108902_mthumb.jpg’); ?? ?

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();????//不成功,记录失败信息???? ??

}

?>?