应该使用哪个PHP(操作码)缓存,为什么?


44

我一直在听一些PHP(操作码)缓存,例如-APC,XCache,Memcache,eAccelerator等。

但是我永远无法弄清楚如何选择一个。除了性能优势(缓存系统应该提供的性能优势)之外,其他因素也应引起关注。

就像为什么您会说X缓存系统胜于Y?我不太担心相对性能的提高。任何两个系统之间的细微差别都不会产生太大的影响。

如果无法对我的问题有一个通用的答案,那么这里没有几个提示。我将专用VPS与Mediatemple一起使用(具有root访问权限)。RAM是512 MB(物理)+ 400MB(交换)我担心WordPress及其表亲WordPress-MU和BuddyPress。我们90%的代码/网站属于WordPress系列。

在此先感谢您的帮助。

Answers:


33

您列出的产品有不同的用途。

OPCode缓存

在此Wikipedia列表上可以看到许多PHP加速器(OPCaches)。与开源产品一样,它们都非常相似。XCache是​​lighttp PHP加速器,并且是运行该HTTPd时的默认选择。它在Apache上也能很好地工作,但是从社交角度来讲,APC似乎在“与其他人打交道”方面略强一些,它是PHP的正式支持,并随PHP的官方发行版一起发布。

我放弃了usign eAccelerator,因为它的开发速度缓慢,并且与PHP的发布相比有所滞后,而APC所提供的官方加持状态具有类似的性能。

这些产品通常都可以买到。无需更改代码即可立即提高性能。使用大型代码库(Drupal,Wordpress),性能可以提高3倍,同时减少响应时间和内存使用量。

资料快取

Memcache是一个略有不同的产品-您可能会认为它是可以扩展到多个服务器轻量级键值系统。必须增强软件以支持Memcache,并且它可以比其他方法更好地解决某些问题。如果您的网站上有实时股票价值列表,则可以使用Memcache保留显示在整个网站上的当前价值的居民列表。您可以使用它来存储会话数据以供短期重用。您不会将其用于诸如全页缓存之类的其他事情,也不会替代MySQL。

还有诸如WP-Super-Cache之类的Wordpress插件可以大大提高Wordpress的性能(实际上,WP-Super-Cache在许多情况下都可以与基于静态HTML的网站匹敌)

总而言之,如果您想要“设置好它,忘记它,受支持的产品”,我强烈推荐APC。


:这个答案正在对元讨论meta.stackexchange.com/questions/15474/...
吉尔伯特

填写“ [4]: http://”进行修复。
布拉德·吉尔伯特

感谢一吨SirStan!您的回答不仅解决了我的问题,还帮助我对缓存世界有了更深入的了解。我只想问你一件事。我已经在使用wp-supercache。与APC结合使用是个好主意吗?APC是否会进一步显着提高性能?APC和Wp-SuperCache是​​否可以一起使用?我都需要吗?还是APC将使Wp-SuperCache冗余?
rahul286

注意:APC同时执行数据缓存和操作码缓存。
lo_fye

2
这个答案现在已经过时了。自5.5版起,Zend的优化器和操作码缓存(现称为opcache)已取代了PHP的未来版本,因此APC不太可能进行更新。但是,我还没有看到性能上的实质性差异(symcbean.blogspot.co.uk/2013/09/…)进一步,opcache中缺乏数据支持,而内存回收不足则可能使升级对某些人产生反作用。
symcbean


6

APC将内置在PHP6中,因此这是一个合理的选择。我使用它,性能提升非常惊人。如果您需要缓存操作码以外的其他内容(即数据库查询结果),则也可以使用APC,但是无法在多个服务器之间共享APC缓存。如果只需要在单个服务器上缓存,那么APC很棒。如果您需要扩展到多个服务器,并希望在它们之间共享缓存,那么memcached是您的理想选择。

不过,我要做的一件事就是为您执行的所有(非操作码)缓存创建一个包装类。这样,您可以换出缓存引擎而无需更改代码。


哇。如果我知道APC的正式身份,我会长期转回去……:-)我对操作码/非操作码缓存的区别也不了解。作为个人选择,我不想经历创建包装器类或修改应用程序源以帮助它们适应缓存env的开销。
rahul286

6
需要注意的是,由于PHP 5.5集成Zend的Opcache作为“官方”码缓存,我认为这是不可能的,他们会切换到APC的PHP 6
利玛窦Tassinari

1
要纠正此问题:Zend Opcache确实附带了PHP 5.5。没有PHP6。将有PHP 7。APC几乎被视为(?)已过时。
Jisse Reitsma,2015年

6

只是要注意,情况有所变化,似乎APC不会包含在PHP 6内核中。

APC的开发速度很慢,而且看起来永远不会与PHP 5.5兼容。因此,看起来来自PHP的人会将Zend OPCache操作码缓存扩展设置为PHP CORE扩展。您可以在这里http://wiki.php.net/rfc/optimizerplus阅读更多内容。

重要说明:Zend OPCache没有像APC这样的用户数据缓存,因此,如果需要用户数据缓存,可以将其与Memcache一起使用。


1
当整个缓存已满(无效条目不会被删除)时,它也会使整个缓存无效-因此,如果您的代码多于内存,或者经常部署,则可能会看到性能峰值。
symcbean 2013年

3

如果运行的PHP版本至少为5.50,OpCache是​​最好的选择(PHP / PECL本机库)。如果从二进制文件安装,则应预先编译。

http://php.net/manual/zh/book.opcache.php

如果运行5.5之前的PHP版本,则APC(PHP / PECL本机OpCode缓存)将是最简单的选择,尽管它被认为是未维护且已失效:

http://php.net/manual/zh/book.apc.php

使用PHP的本机OpCache功能可以节省维护第三方库的麻烦。


1
如果运行PHP <5.5,那么您应该做的第一件事就是更新它。
迈克尔·汉普顿

@ michael-hampton ::确实!但是在极少数情况下,如果不升级操作系统就无法更新PHP,这甚至可能意味着新的硬件要求。示例-我为一家运行IBM i系列服务器版本6somethings的公司工作。我们的PHP版本是5.4.3。由于IBM依赖Zend来移植PHP版本,因此PHP 5.6需要IBM-i OS的更高版本-7.1或更高版本(以及Zend PHP服务器的更高版本),这需要新的Power-8服务器等。嗯
递归

0

Memcache缓存键/值对,而不是操作码。您可以将其与操作码缓存之一结合使用。


从SirStan的回答(如下)看来,memcache可能需要我修改我的PHP应用程序。实际上,我使用的是Wordpress,修改其核心代码并不是一个好主意。
rahul286
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.