使用 eAccelerator加速PHP代码的目的


Posted in PHP onMarch 16, 2007

使用 eAccelerator加速PHP代码 
eAccelerator 真是一个好东西(它的前身是truck-mmcache)。 
简单来讲它是一套配合PHP(支持PHP5)运作的缓存系统,通过共享内存或磁盘文件方式交换数据。 
它被广为使用的是PHP源码“编码”(不太贴切的称为“加密”)和缓存PHP执行的中间码以加速。关于 eA 的安装使用的文章已经很多而且也很详细了,这次我想推荐的是用它辅助程序设计缓存,它提供了一组API如下: 
是一个非常便捷而又稳定的本机缓存实现方式,目前这部分设计似乎只支持于共享内存,所以只能用于 Unix -Like OS 了,windows的就没这个福气了。 
1. eaccelerator_put($key, $value, $ttl=0) 
  将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。 
2. eaccelerator_get($key) 
  根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL 
3. eaccelerator_rm($key) 
  根据 $key 移除缓存 
4. eaccelerator_gc() 
  移除清理所有已过期的 key  
5. eaccelerator_lock($key) 
  为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。 
  例如: 
  <?php 
    eaccelerator_lock("count"); 
    eaccelerator_put("count",eaccelerator_get("count")+1)); 
  ?> 
6. eaccelerator_unlock($key) 
  根据 $key 释放锁 
7. eaccelerator_cache_output($key, $eval_code, $ttl=0) 
  将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put) 
   For Example: 
  <?php eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?> 
8. eaccelerator_cache_result($key, $eval_code, $ttl=0) 
  将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output 
   For Example: 
  <?php eaccelerator_cache_result('test', ' time() . "Hello";', 30); ?> 
9. eaccelerator_cache_page($key, $ttl=0) 
  将当前整页缓存 $ttl 秒。 
  For Example: 
  <?php 
    eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30); 
    echo time(); 
    phpinfo(); 
  ?> 
10. eaccelerator_rm_page($key) 
  删除由  eaccelerator_cache_page() 执行的缓存,参数也是 $key 
______________________________________________ 
(作个简单例子看看它的威力,注意在 cli 模式下可能无效!) 
<?php
class test_cache {
  var $pro = 'hello';
  function test_cache() {
    echo "Object Created!<br>\n";
  }
  function func() {
    echo ', the world!';
  }
  function now($t) {
    echo date('Y-m-d H:i:s', $t);
  }
}
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
  $tt = new test_cache;
  eaccelerator_put("test_tt", $tt);
  echo "no cached!<br>\n";
}
else {
  echo "cached<br>\n";
}
echo $tt->pro; 
$tt->func();
$tt->now(time() + 86400);
?>
以下是网友的评论:
--------------------------------------------------------------------------------
showsa 回复于:2005-12-31 19:51:56win 也支持! http://www.arnot.info/eaccelerator/
 信天翁 回复于:2006-01-04 17:17:37最新版 eAccelerator 0.9.4-rc1 中有个小bug 表现为 /var/log/httpd/error_log 出现大量 [warn] (32)Broken pipe: write pipe_of_death 的错误信息 解决方法 修改 debug.c 文件 ----------------------------------------------- /**  * Close the debug system.  */ void ea_debug_shutdown () {     fflush (F_fp);     // 源语句, 关闭文件时没有检测文件句柄     //fclose (F_fp);    //改为     if (F_fp != stderr) fclose (F_fp);      F_fp = NULL; }
soichiro 回复于:2006-01-10 22:01:21eAccelerator/truck-mmcache太恐怖了,我现在有两个负载很高的系统,一个基于Drupal,另一个基于PostNuke,用了eAccelerator后,Drual速度提升100倍,PostNuke提升10倍,PostNuke提升比较少是因为它本身就很快.
 wangyih 回复于:2006-04-08 10:48:11和使用squid比怎么样
 showsa 回复于:2006-04-08 23:23:44怎么去和 squid去比啊  不一样的东西 squid是缓存页面运行结果 如果不是实时显示,squid肯定强了 但是论坛之类的,squid就不行了,用eaccelerator /memcache 可以很大程度上提升效率
 Yarco 回复于:2006-04-09 10:00:43但是据说和encode过的代码有冲突啊... 不知道现在的和zend的兼容性如何?

PHP 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
php unlink()函数使用教程
Jul 12 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 PHP
PHP的开发框架的现状和展望
Mar 16 #PHP
用header 发送cookie的php代码
Mar 16 #PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 #PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 #PHP
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 #PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 #PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 #PHP
You might like
一个基于PDO的数据库操作类
2011/03/24 PHP
php数组编码转换示例详解
2014/03/11 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
中文专业求职信
2014/06/20 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
董存瑞观后感
2015/06/11 职场文书
新人入职感言
2015/07/31 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书