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

Memcached - PHP 装配&使用

热度:95   发布时间:2016-04-29 00:41:30.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服务端

[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


安装完毕,测试:

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

}

?>?