同台服务器使用缓存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调用三种数据库的方法(1)
Oct 09 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
PHP 引用文件技巧
Mar 02 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
php读取文件内容的方法汇总
Jan 24 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
Sep 14 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 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检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
英文简历中的自我评价用语
2013/12/09 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
植物生产学专业求职信
2014/08/08 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
初中语文教学研修日志
2015/11/13 职场文书
初中班主任心得体会
2016/01/07 职场文书
如何使用SQL Server语句创建表
2022/04/12 SQL Server
JavaScript中reduce()的用法
2022/05/11 Javascript