首页 » PHP » 正文

php缓存

php缓存

PHP缓存包括PHP编译缓存和PHP数据缓存两种
PHP编译缓存:目前最常见的PHP编译缓存工具有:APC,xcache、Opcache、hhvm、eaccelerator、yac
PHP数据缓存:PHP的数据缓存包括针对数据库数据进行缓存和针对PHP模板数据进行缓存。针对数据库数据进行缓存的工具有memcache等。针对PHP模板数据进行缓存的工具主要有smarty等。

PHP编译缓存:

APC:2012-09-03以后就不在更新了,并且2012-04-11之后发布的全部都是beta版,最后一次的stables版本是在2011-05-14发布的。

xcache:在php缓存官方文档中没有这个工具,xcache是由lighttpd开发成员开发的,不是php默认提供的。需要单独安装扩展。

Opcache:新一代PHP加速器,由Zend公司研发,其实现原理与Xcache类似,都是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,但性能却比Xcache更加优越,这个是php5.5默认提供的php脚本缓存扩展,由于是默认提供的,所以在编译php5.5以后版本时加上参数–enable-opcache就可以编译opcache了,不需要单独安装扩展包,推测opcache比xcache更快些(http://php.net/manual/zh/book.opcache.php),

hhvm:HHVM是由Facebook公司出品的高性能开源服务器,用来执行hack编程语言或者php编程语言。HHVM借由将 PHP 程式码编译为字节码 ,使其可运行于虚拟机器的环境,也可以利用客制的机器码。当前Facebook的PHP程式皆运行在HHVM上。源码自行编译不支持centos 7,支持centos 6.3和6.x,可以理解为HHVM是一个虚拟机,安装完HHVM后,在HHVM中安装php(执行php的虚拟机)。这样的话,php会占用系统资源,同时HHVM虚拟机也会占用系统资源。
http://www.freehao123.com/hhvm-php/

eaccelerator:我们在php5.2的时候使用的这个,但是在php5.4以后弃用了eaccelerator,原因:在php5.4上加载了eaccelerator加速扩展后,PHP代码中使用复杂调用preg_replace_callback函数的代码段后会引起严重的内存溢出(memory leak);而preg_replace函数在php5.5已经不再建议使用,而是改用preg_replace_callback代替。
yac:是由鸟哥开发的,php默认是不支持的,需要单独安装扩展包。

综合以上说明,我们准备采用Opcache加速器。
php数据缓存:memcache、redis和mongodb,主要看哪个缓存数据库支持我们新业务的数据格式
php模版数据缓存目前还不清楚是什么,在查询资料
参考资料:http://baike.baidu.com/link?url=lNoe3Gjpmtl3KuYasCFMfDFBEuKwiPOibOeDAkx_DyFs7ZiI_r8UuS0GttRTckkiAoJOXM2aWNEGFZpNoBR6Ba
PHP编译缓存:
eaccelerator:我们在php5.2的时候使用的这个,但是在php5.4以后弃用了eaccelerator,原因:在php5.4上加载了eaccelerator加速扩展后,PHP代码中使用复杂调用preg_replace_callback函数的代码段后会引起严重的内存溢出(memory leak);而preg_replace函数在php5.5已经不再建议使用,而是改用preg_replace_callback代替。
1、eAccelerator在请求时间和内存占用综合方面是最好的。
2、使用加速器比无加速器在请求时间快了3倍左右。
3、通过各个官方观察,XCache是更新最快的,这也说明最有发展的。
网上的测试结果:
请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None 10.41 96.08 24 24
APC 30.45 32.84 21 21
eAccelerator 31.26 31.99 23 18
XCache 30.28 33.02 29 19

参考资料:http://www.vpser.net/opt/apc-eaccelerator-xcache.html
参考资料:http://blog.jjonline.cn/linux/135.html
xcache:作为目前使用广泛的PHP加速器之一,其性能比早期的eAccelerator加速器要优良
Opcache:新一代PHP加速器,由Zend公司研发,其实现原理与Xcache类似,都是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,但性能却比Xcache更加优越,这个是php5.5默认提供的php脚本缓存扩展,编译php5.5时加上参数–enable-opcache就可以编译opcache了(http://php.net/manual/zh/book.opcache.php),
启用opcache后的一些情况:
典型的就是由于opcache的缓存加速机制导致的代码变更后无法立即看到效果。php代码被转换成可立即执行的“机器码”后会有一定的缓存时间后才会去检查原始的PHP文件是否变动过,具体视配置项opcache.revalidate_freq设置的秒数情况而定;这样就会导致某些情况下明明更新了PHP文件中的代码,但执行后却看不到改变后的效果,这就是因为opcache检查php文件变动的间隔时间尚未结束所导致。
这个问题并不是bug,而要视具体生产环境来设定opcache.revalidate_freq值,倘若php代码很少变动,建议该值设置的大一些,可减少opcahce由于检查php文件变动而带来的额外开销,比如7200
那么在变动php文件后如何才能快速降低opcache缓存带来的这种问题呢?最简单的方法就是更新代码后重启下php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。
参考资料:http://blog.jjonline.cn/linux/135.html
hhvm:HipHop VM(HHVM)是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点;
1、hhvm将PHP代码编译转换成C++程序来执行,执行效率得到显著提升;
2、根据Facebook透漏,HHVM在速度方面获得了显著改进,比目前使用的PHP解释器快60%,而使用内存减少90%
3、源码自行编译不支持centos 7,支持centos 6.3和6.x
参考资料:http://www.cnblogs.com/xiaocen/p/3709850.html
参考资料:http://www.hhvm.org.cn/
个人建议:
我们可以在APC,xcache、Opcache这三个缓存工具中选择一个,个人倾向于Opcache,因为他是php默认提供的php脚本缓存扩展。
php数据缓存:memcache、redis和mongodb,主要看哪个缓存数据库支持我们新业务的数据格式