注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

memcached安装+php使用手记  

2010-05-11 16:28:42|  分类: memcache |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://yangyi.jmeye.com/index.php?aid=48

本文简要介绍一下安装的情况,以及PHP模块memcache使用情况:

提要:
1。安装memcached服务器端
2。安装php对memcache支持模块
3。使用memcache情况,计数器、数据压缩
4。Memcache内存的更新清理(delete flush)
5。内存超量的测试(set)

1。安装memcached服务器端
memcached安装说明(北南南北的站):
http://www.linuxsir.org/main/?q=node/184

注意的是:如果你安装过程中出现错误,请看看是不是有模块没装:
autoconf
zlib (压缩数据用)

2。安装php对memcache支持模块
PHP老家:
http://cn.php.net/manual/zh/ref.memcache.php
(PHP 4.3.3 or newer is required to use the memcache extension. 难道,4.3.3都装上了吗?好像没有吧,用4.4.4好像都要另外装的)

3。使用memcache情况,计数器、数据压缩
使用情况一:统计

//访问统计
$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;
?>

其实我们可以用increment方法代替上面的做法

$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);
?>

数据压缩:

$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);
?>

使用情况说明:

前台比较
目前内存
bytes
总共读取
bytes_read
总共写入
bytes_written

压缩前
700085
700081
416

压缩后
1131
1125
13

可能看到压缩后明显占用内存少了不少

4。Memcache内存的更新清理(delete flush)

$memcache = new Memcache;
$memcache->connect(’localhost’, 11211) or die (”Could not connect”);

/*设置值*/
$status = $memcache->getStats();
echo ‘设置前内存使用情况’.$status['bytes'].’
‘;
echo ‘设置后’;
for($i=0;$i<9;$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<9;$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<9;$i++) {
$memcache->set(’b’.$i,rand(1,99));
echo ‘
‘.$i.’->’.$memcache->get(’b’.$i);
}
$memcache->flush();
echo ‘flush之后:’;
for($i=0;$i<9;$i++) {
echo ‘
‘.$i.’->’.$memcache->get(’b’.$i);
}
$status = $memcache->getStats();
echo ‘flush后内存使用情况’.$status['bytes'].’
‘;
?>

5。内存超量的测试(set)

我们把内存设为2M

./memcached -d -m 2 -p 11211 -u root

$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.’->设置成功
‘;
$status = $memcache->getStats();
echo ‘内存:’.$status['bytes'].’
‘;
}
else {
echo $j.’->设置失败
‘;
}
}
?>

执行结果:

test1->设置成功
内存:600042
test2->设置成功
内存:1200084
test3->设置失败
test4->设置成功
内存:1200084
test5->设置失败
test6->设置失败

刚好印证我们的计算,不过20万的repeat为什么会失败,不是太了解,

总结:

示例:

//设置篇
if($data = $memcache->get(’k',$v)) {
//显示我们的数据
}
else {
$data = get_from_database; //得到数据源
if(!$memcache->set(’k',$data), MEMCACHE_COMPRESSED) //开始设置
log(); //不成功,记录失败信息
}
?>

———–OVER———–

 

  评论这张
 
阅读(377)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017