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服务端
[email protected]:# tar vxzf memcached-1.1.12.tar.gz [email protected]:# cd memcached-1.1.12 [email protected]:# ./configure --prefix=/usr/local/memcached [email protected]:# make [email protected]:# make install |
安装完毕重启服务:
[email protected]:# cd /usr/local/memcached/bin [email protected]:# ./memcached -d -m 50 -p 11211 -u root |
安装PHP模块
[email protected]:# tar vxzf memcache-1.5.tgz [email protected]:# cd memcache-1.5 [email protected]:# /usr/local/php/bin/phpize [email protected]:# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir [email protected]:# make [email protected]:# 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 |
安装完毕,测试:
?$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):
//访问统计??
$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代码
$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代码
$memcache?=?new?Memcache;??
$memcache->connect(’localhost’,?11211)?or?die?("Could?not?connect");
?$test=(str_repeat(’jetwong’,100000));??$memcache->set(’b’,($test));?
?>
?使用压缩:??
?$memcache?=?new?Memcache;
?$memcache->connect(’localhost’,?11211)?or?die?("Could?not?connect");
?$test=(str_repeat(’jetwong’,100000));?
$memcache->set(’b’,($test),MEMCACHE_COMPRESSED);?
?>??
内存的更新清理PHP代码
?$memcache?=?new?Memcache;?
$memcache->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代码
$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$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();????//不成功,记录失败信息??????
}
?>?