同台服务器使用缓存APC效率高于Memcached的演示代码


Posted in PHP onFebruary 16, 2010
<?php 
$memcachehost = 'localhost'; 
$memcacheport = '11211'; 
function microtime_float(){ 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
function runtime($t1){ 
return number_format((microtime_float() - $t1)*1000, 4).'ms'; 
} 
$starttime = microtime_float(); 
$cache_time = '30'; 
echo "init=====".runtime($starttime).'<br>'; $sql = "SELECT * FROM hx WHERE id = 10006"; 
$mem_sql_key = md5($sql); 
$t1 = microtime_float(); 
echo "APC_read====="; 
$arrs = apc_fetch($mem_sql_key); 
echo runtime($t1).'<br>'; 
$t1 = microtime_float(); 
apc_store($mem_sql_key.'_test', $arrs, $cache_time); 
echo "APC_write====="; 
echo runtime($t1).'<br>'; 
$t1 = microtime_float(); 
$mem = new Memcache; 
$mem->connect($memcachehost, $memcacheport); 
echo "MEM_connet=====".runtime($t1).'<br>'; 
$t1 = microtime_float(); 
$arrs = $mem->get($mem_sql_key); 
echo "MEM_read====="; 
echo runtime($t1).'<br>'; 
$t1 = microtime_float(); 
$mem->set($mem_sql_key.'_test',$arrs,0,$cache_time); 
echo "MEM_write====="; 
echo runtime($t1).'<br>'; 
?>

预先把这句SQL的结果在apc和memcached中都缓存了,然后测试读写速度。
在本机windows上结果:
init=====0.0341ms
APC_read=====0.0439ms
APC_write=====0.0920ms
MEM_connet=====11.0571ms
MEM_read=====0.2630ms
MEM_write=====0.2270ms

在服务器上linux上结果:
init=====0.0131ms
APC_read=====0.0520ms
APC_write=====0.0489ms
MEM_connet=====0.0501ms
MEM_read=====0.1030ms
MEM_write=====0.0801ms

当然反复刷新会有不同的值,这里只是取了一个较平均的值。
win下的不具备什么参考性,主要看linux上的结果。
不算connent时间,大概读写的速度apc都比memcached快上一倍左右。算上memcache_connect的时间,也就是快二倍。
APC即可以实现php文件的opcode缓存,也可以实现user cache,实在是个好东西。

所以,如果当网站规模还小的时候,所有功能可以在一台服务器上完成时,那么缓存的方案首选应该就是APC,不用考虑memcached。但如果考虑到网站规模会不断扩大,这点时间的性能差异其实可以忽略不计的,就应该部署memcached了。
另外,跨服务器使用memcached,最好要使用内网。不然的话,受路由的影响,memcached经常会连接超时(超过100ms),而且会凭空多出来两倍的宽带流量。

PHP 相关文章推荐
用PHP和ACCESS写聊天室(二)
Oct 09 PHP
mysql 字段类型说明
Apr 27 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
php截取字符串函数分享
Feb 02 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
详解PHP Swoole与TCP三次握手
May 27 PHP
用php如何解决大文件分片上传问题
Jul 07 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 #PHP
PHP IPV6正则表达式验证代码
Feb 16 #PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
Feb 16 #PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 #PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 #PHP
一步一步学习PHP(6) 面向对象
Feb 16 #PHP
一步一步学习PHP(5) 类和对象
Feb 16 #PHP
You might like
PHP简介
2006/10/09 PHP
PHP 引用文件技巧
2010/03/02 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
php解析json数据实例
2014/08/19 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
浅谈Python单向链表的实现
2015/12/24 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
详解python程序中的多任务
2020/09/16 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
html5与css3小应用
2013/04/03 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
优秀团员自我评价
2015/03/10 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书