下载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
$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 //访问统计
$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(); //不成功,记录失败信息
}
?>