`
haohappy2
  • 浏览: 326356 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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


二:数据压缩:

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

分享到:
评论

相关推荐

    PHP中memcache扩展 5.2和5.3版本

    5. **压缩数据**:为了节省内存,Memcache扩展支持在存储时自动压缩数据,当数据大小超过一定阈值时自动启用。 6. **过期时间**:每个缓存项可以设置一个过期时间,过期后将自动从缓存中移除。 7. **自增/自减操作...

    php_memcache

    1. **分布式存储**:Memcache可以将数据分散存储在多台服务器上,实现负载均衡和高可用性。 2. **Key-Value存储**:数据以键值对的形式存储,便于快速查找和操作。 3. **内存存储**:所有的数据都存储在内存中,读写...

    php对memcache的扩展

    Memcache是一个广泛使用的分布式内存对象缓存系统,它能够存储和检索数据,包括动态网页内容,以减少数据库访问的负担。PHP作为流行的服务器端脚本语言,通过扩展与Memcache进行集成,为开发者提供了方便快捷的缓存...

    全面解析PHP操作Memcache基本函数

    17. Memcache::setCompressThreshold — 设置大值的自动压缩阈值,超过此值的数据会自动压缩。 18. Memcache::setServerParams — 允许动态修改服务器参数和状态。 19. memcache_debug — 此函数用于控制调试信息...

    PHP数据库操作二:memcache用法分析

    - **php集成**: 在php.ini中配置`session.save_handler = memcache`和`session.save_path`来启用memcache存储session,可以实现多服务器session共享。 **使用与命令** - **memcache命令行**: 通过telnet或者专用...

    PHP使用memcache缓存技术提高响应速度的方法

    第二个示例展示了如何使用memcache进行计数器操作,通过获取、递增并设置'pid'键的值,实现了一个简单的计数器。 **四、memcache的优势** 1. **高速度**:由于数据存储在内存中,访问速度极快。 2. **分布式**:...

    PHP MemCached 高级缓存应用代码

    18. **`Memcache::setCompressThreshold()`** - 设置压缩阈值,当数据大小超过这个阈值时,数据会被压缩后再存储,以节省空间。 19. **`Memcache::setServerParams()`** - 动态设置与特定服务器的连接参数,如超时...

    Redis面试知识点.pdf

    - **计数器**:使用原子增减操作实现计数器功能。 - **排行榜**:使用Sorted Set实现排名功能。 #### 37、假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来? 使用`...

    CID_2021_在混合模式下构建基于硬件的性能监控基础设施1

    - **缓存分析**:考察缓存大小、Intel与AMD的L3缓存垂直差异、缓存未命中率和延迟,以及缓存行大小、对齐问题、缓存感知数据结构(如零填充)、在飞行数据压缩与解压缩、缓存行伪共享以及L3预取策略。 - **TLB...

Global site tag (gtag.js) - Google Analytics