php中opcache的使用详解(转帖)

简述

关于opcode缓存的概念可以参考鸟哥的文章:http://www.laruence.com/2008/06/18/221.html
目前为php提供opcode缓存的扩展有很多,比如:Zend Opcache,xcache,eAccelerator,apc等等。

为什么选择opcache呢?

  • 官方出品,这就保证了会持久更新,而其他一些扩展如apc已经很久都没有更新过了;
  • 适配php5.2、5.3、5.4,而且在php5.5版本之后自带了opcache,不需要额外安装,在非 Windows 平台使用
    zend_extension=/full/path/to/opcache.so, Windows平台使用zend_extension=C:\path\to\php_opcache.dll即可;
  • 在各种opcode缓存扩展中,Zend Opcache的优化性能最好(在网上看到的一些文章里都这样说,笔者没有亲自做过对比,故读者只是作为借鉴即可)

在windows下的安装及配置

在该地址可以找到你的开发环境对应的opcache扩展:http://windows.php.net/downloads/pecl/releases/opcache/
解压后放到dll扩展目录下,笔者的本地环境是wamp一键安装包,将dll文件放置在该地址:H:\wamp\bin\php\php5.5.12\zend_ext

将如下配置段加入到php.ini文件中:

详细配置信息参见php文档:http://php.net/manual/zh/opcache.configuration.php
修改完ini文件后重启服务器,打印phpinfo()信息,如果看到如下截图,就说明opcache安装成功了。
php中opcache的使用详解
上图中的Cache hits(缓存命中率)对我们来说比较具有参考价值。

测试以及相关函数的使用

  • 测试安装好opcache之后,我们可以先测试一下,

test2.php

打印结果是hello test。现在修改一下文件内容:

test2.php

打印结果依旧是hello test。说明该文件已经经过了opcache缓存。一直刷新该页面,注意观察该值什么时候发生了变化。同时注意phpinfo中缓存命中率的数据是否一直在增加。再检查一下opcache.revalidate_freq的配置参数,就可以看出在opcache.revalidate_freq配置时间段内php不会检查该文件是否有更新。

  • 相关函数

如果想清空opcode缓存,可以使用opcache_reset函数,下面是一个例子:

执行代码后可以看到phpinfo中缓存命中率的数据已经清零。
php中opcache的使用详解

从前面的测试中,我们可以看出,要生成opcode缓存的话,必须有用户访问该页面才行,opcache为我们提供了一种不需要用户访问就能预先生成opcode缓存的方法opcache_compile_file,下面是一个例子:

test4.php

现在我们如果检查test2.php文件是否已经存储到opcode缓存中去了呢?很简单,使用opcache_is_script_cached函数即可,下面是一个例子:

test3.php

执行结果为:true

前面提到的opcache_reset函数将会清空所有的opcode缓存,如果我们只想清空某个文件的缓存的话可以使用opcache_invalidate函数,下面是一个例子:

test5.php

再次执行test3.php,运行结果为:false
还有两个函数用于获取opcache的相关信息,opcache_get_status(获取缓存的状态信息),opcache_get_configuration(获取缓存的配置信息),下面是一个例子:

test6.php

执行结果:
php中opcache的使用详解
php中opcache的使用详解

关于php中opcache的使用就讲到这里,希望对各位有所帮助。

原文出处:http://blog.csdn.net/u011250882/article/details/49431053 | 且行且吟

评论关闭

return top