阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 8203阅读
  • 1回复

PHP 应该怎么选择缓存器

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 ivmmff 从 云服务器ECS 移动到本区(2015-08-30) —
前言 V"iLeC  
8 GN{*Hg  
BxYA[#fd}  
PHP 使用缓存器是服务优化中较方便且马上就可以看到效果的优化方式,可以降低 CPU 的使用,减少 PHP 进程,加快动态网页的响应。一般的传统虚拟主机是不会安装缓存器的,这也是服务器和虚拟主机比较明显的差距。 tb3fz")UC  
5AU3s  
3>v0W@C  
下面说一下两大类缓存器: ZRGZ'+hw  
3 ?~+5DU  
字节码缓存 0u2uYiE-l  
W=]",<  
[HDO^6U  
当一个PHP文件被执行时,它先被编译为字节码(也称 opcode ),然后这些字节码被执行。如果文件没有修改,那么字节码也会保持不变, 这意味着编译是完成了,但是白白浪费了CPU资源。这就是引入字节码缓存的原因,通过把字节码保存在内存中来消除冗余的编译,重用它们完成后续的调用。配置字节码缓存非常简单, 而且可以极大地提高应用的执行效率,没有理由不使用字节码缓存。 _!p3M3"$B  
J?fh3RW9  
=A 6O}0z  
流行的字节码缓存方案有:Apcu(源APC),Xcache,Zend Opcache(原Zend Optimizer+),WinCache,eaccelerator等。 ;NeEgqW "  
tta0sJ8 i  
JZxF)] ^  
其中最优秀而且最给力的并且兼容度最高的是 Zend Opcache(毕竟是亲儿子),Xcache 和 APC 也是被大厂商选择的对象之一。 'PYqp&gJ  
rd4'y~#S  
对象缓存 Qp&yS U8  
/+O8A}  
 WPKTX,k  
很多时候,在代码中缓存对象可以带来很大的效益,例如获取代价很大的数据和查询结果很少变化的数据库调用。我们可以使用对象 缓存系统缓存这些数据,大大加快后续的同类访问请求。如果你在取得这些数据之后,把它们缓存在系统中,在后续对这些数据的请求 中,就可以直接使用缓存中的对象,这么做可以很大的提示系统性能,减少服务器的负载。 CT%m_lN  
uA`PZ|  
9yw/-nA  
很多流行的字节码缓存方案也允许你缓存定义数据,因此我们更应该充分利用对象缓存功能。APC、XCache 和 WinCache 都提供 API, 让你把数据缓存在他们的内存cache中。 )uuEOF"w  
L b;vrh;A  
$50"3g!Y  
使用最多的内存对象缓存系统是 APC Functions 和 Memcached ,APC是很好的一个对象缓存方案,它提供了简单的API来让你把对象存储在内存中,而且 配置和使用都非常容易,它的一个缺点是只能在本机使用。Memcached则是另外一种方式,它是一个单独的服务,可以通过网络访问,这 意味着可以在一个地方写入数据,然后在不同的系统中访问这份数据。 UC/2&7 ?  
g_c)Ts(  
r ;8z"*  
不过对象缓存需要网站程序去兼容缓存器的 API ,例如:Wordpress 针对不同缓存器的 API,有不同的 object 文件。 L#q9_-(#  
X`QW(rq  
U*"cf>dB(  
流行的对象缓存方案有:APC Functions,PHP-Memcached,Redis,XCache APIs,WinCache Function等。 (ul-J4E\O  
810<1NP  
EFt`<qwj  
最给力的是 Redis(单机场景中或需要缓存持久化的场景)和 Memcached (集群化环境) -7z y  
Cf=q_\0|W  
效果说明 5=h'!|iY  
l~!fQ$~  
yZ)aKwj%U  
一般的话字节码缓存应用用与单一的 php 文件不包括数据库的,而对象缓存则是应用与对 php 的数据库拓展之中。 +xBK^5/x  
s_Oh >y?Aq  
R:BBNzY}f  
但是 php 的流行程序都是需要数据库的所以你要优化程序的执行环境那么就要同时具备两种特性。所以单靠一类缓存特性是不能体现整体性能的,所以要两类综合考虑。综合考虑和对php的兼容度以及对程序的兼容度那么最优秀的是:Xcache,Apc。经过前人和本人的多次测试,Xcache 应用于 VPS 或者服务器性能优于 Apc;但是在虚拟主机的多用户环境中 Apc 优于 Xcache,且 APC 更加稳定。 GKujDx+h  
^~<Rzq!  
缓存器共存 3_*Xk. .d  
Dq%r !)  
u$=ogp =0  
由于一些缓存器是不兼容两类缓存的,所以我们可能会需要多种缓存器一起共存来使用。但是缓存器共存有可能不仅不能很好的体现性能或者性能还不如单一缓存器更甚者可以报错! K M\+  
i,Wm{+H-O  
G1;'nwf}  
下列是推荐的 流行并且可靠的缓存器共存方案: ={E!8"  
$:BK{,\  
H;*a:tbxO+  
Memcached(Redis)+Zend Opcache :&0yf;>v  
hp]ng!I{\u  
+>WC^s  
是对象缓存和字节码缓存的佳作,是最能体现性能的,目前大多数的大型网站是通过这类方案的。当然了你可以自己搭配只有对象缓存和只有字节码缓存的共存。 8Z4?X%  
k4F"UG-`  
*iRm`)zC(  
注意: <V:<x  
NBqV0>vR  
W93JY0Ls9|  
1.非单一类缓存器与单一类缓存器共存会降低性能。 yw* mA1v  
如:Xcache+Zend Opcache 就会有对象缓存能力不如单一 Xcache 而字节码缓存能力又不如 Zend Opcache 的情况。 2^ ,H_PS  
`zzKD2y  
XHZ: mLf  
2. Xcache和Apc不能完美共存 !&a;P,_Fb  
RT,不能完美共存,用多了会报错。 TI[UX16Tz1  
i2FD1*=/?  
5Q$r@&qp  
3.Xcache和Memache不能完美共存 dm,}Nbc91(  
RT,不支持部分软件。 (3N"oE.b]  
4P4 Fo1  
zY1s7/$ i  
来自:https://www.vobe.io/295
级别: 科学怪人
发帖
9441
云币
14683
只看该作者 沙发  发表于: 2015-08-30
学习学习
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)