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代码
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代码
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代码
connect(’localhost’,?11211)?or?die?(could?not?connect);?
if($s=$memcache->increment(’a’,1))?{echo?$s;}?
else$memcache->set(’a’,1);
??>
?数据压缩php代码
connect(’localhost’,?11211)?or?die?(could?not?connect);
?$test=(str_repeat(’jetwong’,100000));$memcache->set(’b’,($test));?
?>
?使用压缩:
connect(’localhost’,?11211)?or?die?(could?not?connect);
?$test=(str_repeat(’jetwong’,100000));?
$memcache->set(’b’,($test),memcache_compressed);?
?>
内存的更新清理php代码
connect(’localhost’,?11211)?or?die?(could?not?connect);
?/*设置值*/
?$status?=?$memcache->getstats();
echo?’设置前内存使用情况’.$status[’bytes’].’
’;?
echo?’设置后’;for($i=0;$i$i++)?{
$memcache->set(’b’.$i,rand(1,99));?
echo?’
’.$i.’->’.$memcache->get(’b’.$i);
}
? /*查看设置的值*/
$status?=?$memcache->getstats();
?echo?’delete前内存使用情况’.$status[’bytes’].’
’;
echo?’
开始delete’;
for($i=0;$i$i++)?{
? ? $memcache->delete(’b’.$i);
? echo?’
’.$i.’->’.$memcache->get(’b’.$i);
}
?/*查看flush使用的情况*/?
$status?=?$memcache->getstats();
echo?’使用flush前内存使用情况’.$status[’bytes’].’
’;
echo?’使用flush情况:’;?
for($i=0;$i$i++)?{
$memcache->set(’b’.$i,rand(1,99));
echo?’
’.$i.’->’.$memcache->get(’b’.$i);
}
$memcache->flush();?
echo?’flush之后:’;?
for($i=0;$i$i++)?{
? echo?’
’.$i.’->’.$memcache->get(’b’.$i);
}
$status?=?$memcache->getstats();?
echo?’flush后内存使用情况’.$status[’bytes’].’
’;
?>?
内存超量测试php代码
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$i++)?{?
$j=’test’.$i;
if($memcache->set($j,$$j))
{
? ? ? ? ? echo?$j.’->设置成功
’;
$status?=?$memcache->getstats();
? echo?’内存:’.$status[’bytes’].’
’;
}else?{
? echo?$j.’->设置失败
’;
? ?? }
? }?
?>
总结 php代码
? //设置篇
?if($data?=?$memcache->get(’k’,$v))?{?
//显示我们的数据?
}else?{?
? $data?=?get_from_database;?//得到数据源
? ? if(!$memcache->set(’k’,$data),?memcache_compressed)?//开始设置?
? ? log();//不成功,记录失败信息
}
?>?