Memcache mysql范例

  • 内容
  • 评论
  • 相关

Memcache mysql实例

中文api http://code.google.com/intl/zh-CN/appengine/docs/python/memcache/


Memcache::flush // 刷新所有Memcache上保存的项目(所有项目过期,类似于删除所有的保存的项目,但内存中有)
Memcache::pconnect // 打开一个到Memcache的长连接
Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写


下面是一些简单的用法实例,仅供参考

<?php $mem = new Memcache; $mem->connect("127.0.0.1", 12000); //Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存 ,第四个参数可选,用来设置一个过期自动销毁的时间。 $mem->set('test','123',0,60); //Memcache::add方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。 $mem->add('test','123',0,60); //Memcache::get方法的作用是获取一个key值,Memcache::get方法有一个参数,表示key。 $mem->get('test');//输出为'123' //Memcache::replace 方法的作用是对一个已有的key进行覆写操作,Memcache::replace方法有四个参数,作用和Memcache::set方法的相同。 $mem->replace('test','456',0,60); //Memcache::delete方法的作用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。 $mem->delete('test',60); ?>

欢迎大家阅读《Memcache mysql范例》,跪求各位点评,by 搞代码

使用情况一:统计  可以通过对所有的key进行管理批量操作 http://hudeyong926.iteye.com/blog/1253791

 

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

 

$boolen_no_cached = (intval(date('H'))>=23||intval(date('H'))<=8); //不用memecache的时间段 $date = date('Y-m-d'); $eeyyid =trim($_GET['eeyyid']);  $listkey = md5($eeyyid); if ($lists = $memcache->get($listkey)) {//memcache 缓存  $list = unserialize ($lists);    } else { //mysql     $list = $delegate->check_type_info($eeyyid);//得到数据库的值  $memcache->set($listkey, serialize($list), MEMCACHE_COMPRESSED, 0);    }   $key = md5($typeid.$date); if(unserialize($lists)){  $typeid = $list['typeid'];    $type_hits =  $delegate->check_typehits_info($typeid, $date);  if($type_hits){   if($boolen_no_cached){    if($views = $memcache->get($key)){ //一次性保存后删除memecache缓存     $data_type = array('views'=>$views,'updatetime'=>$date);     $delegate->update_typehits_info($data_type, $typeid);     $memcache->delete($key);        }else{     $data_type = array('views'=>'+=1','updatetime'=>$date);     $delegate->update_typehits_info($data_type, $typeid);    }   }else{    if ($views = $memcache->get($key)) {//memcache     $views=$views+1;       $memcache->set($key, $views, MEMCACHE_COMPRESSED, 0);       } else { //mysql        $views = $type_hits['views']+1;//得到数据库的统计数     $memcache->set($key, $views, MEMCACHE_COMPRESSED, 0);       }       }  } } 

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

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

 

使用压缩:

<?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect"); $test=(str_repeat('jetwong',100000)); $memcache->set('b',($test),MEMCACHE_COMPRESSED); ?> 

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

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

 5。内存超量的测试(set) 我们把内存设为2M
./memcached -d -m 2 -p 11211 -u root

<?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>';     } } ?> 

执行结果:
test1->设置成功
内存:600042
test2->设置成功
内存:1200084
test3->设置失败
test4->设置成功
内存:1200084
test5->设置失败
test6->设置失败
刚好印证我们的计算,不过20万的repeat为什么会失败,不是太了解,,,,,,

原创文章,转载请注明: 转载自搞代码

本文链接地址: Memcache mysql范例

微信支付二维码

微信 赏一包辣条吧~

支付宝支付二维码

支付宝 赏一听可乐吧~

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注