设为首页 收藏本站
查看: 940|回复: 0

[经验分享] memcache实现计数器和数据压缩

[复制链接]

尚未签到

发表于 2017-4-15 07:54:21 | 显示全部楼层 |阅读模式
  一:访问统计
  //访问统计
$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);
?>


二:数据压缩:
  <?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);
?>


使用情况说明:

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

压缩前 700085 700081 416

压缩后 1131 1125 13

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



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'].'
';
?>

内存超量的测试(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();    //不成功,记录失败信息    
}
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364967-1-1.html 上篇帖子: memcache客户端“一致性hash算法”设置 下篇帖子: Python memcache 上传数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表