Memcached vs APC我应该选择哪一个?[关闭]


161

我读了这篇文章:http : //www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/从什么时候开始..我想获得最好的缓存引擎,以便我的应用程序真的很快。当然,我不想超速缓存,但我至少要选择最好的东西。在那篇文章中,它说Memcached慢而apc快,那么为什么每个人都选择memcached

http://framework.zend.com/manual/zh-CN/zend.cache.backends.html#zend.cache.backends.twolevels在这里说:“使用像Apc,Memcache等这样的快速(但受限制的)... “像文件,Sqlite这样的“慢”文件” ...您认为使用Apc作为快速文件和使用Memcache作为慢文件是一个好主意吗?


14
顺便说一句:即使不使用,也应使用APC apc_store。仅操作码缓存可使PHP快几倍。
Kornel

@porneL:你什么意思?即使我不添加代码以在脚本中缓存任何内容,APC在安装后是否还能提高PHP速度?
Marco Demaio

5
@Marco Demaio:的确如此。APC主要是一个PHP优化器(只要启用,默认情况下就会进行优化),apc_store()除此之外,它只是一个额外的好处。
Kornel

3
在2014年,如果仅将其用于1台服务器上的缓存,请使用APCu。
弗里翁

Answers:


268

Memcached是分布式缓存系统,而APC是非分布式的-主要是操作码缓存。

如果(且仅当)您有一个必须驻留在不同Web服务器上的Web应用程序(负载平衡),则必须使用内存缓存进行分布式缓存。如果不是,则坚持使用APC及其缓存。

您应该始终使用操作码缓存,即APC(也将APC集成到php6 iirc中,所以为什么不立即开始使用它)。

您可以/应该将两者用于不同的目的。


5
惊人的答案+1。我的问题现在是什么opcode缓存?
Marco Demaio

4
@Karsten如果您有不同的服务器(例如云负载平衡的环境),只要您不需要在它们之间维护/共享状态,APC也可以像直接使用内存缓存一样正常工作-尽管可能不像每个服务器那样都最佳云实例将不得不预热自己的缓存...

35
opcode缓存是一种将纯PHP代码编译为机器代码(“ opcode”),然后将其存储在已编译形式中以供将来请求的缓存(直到它检测到原始PHP文件已更改)。这意味着PHP不必在每个请求上都运行此编译步骤,从而节省了一些时间。这只是确保网站(包括许多其他站点)快速运行的一种方法。
西蒙东

2
这里有一个有趣的幻灯片,解释了图表和基准的一些区别: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
memechached可以用于非分布式系统而不是APC吗?如果将来会有更多的计算机,最好只保留一台。对?还是同时使用它们,一个用于操作码,另一个用于可扩展的缓存?
Adib Aroui

43

如果您需要保留多个Web服务器之间的状态,请使用Memcached(如果负载均衡,并且所有服务器的缓存中的内容相同,这一点很重要)。

APC,如果您只需要访问快速内存以在(或每台)服务器上读取(和写入)。

请记住,APC还可以编译并加快脚本执行时间。因此,例如,您可以使用APC来提高执行性能,而将memcached用作缓存存储。


3
APC也可以缓存存储....还是?
mr_app

7
2014年更新:PHP 5.5将自然包含Zend Optimizer Plus(仅适用于opcache,不适用于用户缓存),而且似乎不会在PHP 5.4之上开发APC吗?但是现在有APCu pecl.php.net/package/APCu,其只用了APC的用户的高速缓存部分
Flion

18

APC的主要优势是操作码缓存。由于PHP 5.5将OpCache集成到其内核中,并且APC for PHP 5.4仍被标记为beta,因此这不是官方的声明,但是APC的开发将在不久的将来被放弃。

因此,我建议您选择Memcached。


5
我已经花了数小时在网络上进行思考,并且得出了相同的结论。
Nicolas Zozol 2014年

9

我同时使用一个来提高速度,另一个使用同步所有服务器。如果您确实使用了memcache,请记住要使用iptables阻止的开放端口。


6

嘿Thomaschaaf,我希望这对您来说不算晚,但是请注意,APC存在一些与“用户缓存”有关的问题。简而言之,当您为缓存条目设置超时时,或者如果您的Apache在内部APC代码内崩溃(例如,超时),则可能会遇到一些问题。

我对这里的问题的条目:http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html,你也应该阅读的http://t3.dotgnu。 info / blog / php / user-cache-timebomb.html(我认为是APC开发人员之一)


22
我偶然发现了这个问题,想更新一下,现在似乎已经解决了(两年后应该解决!)。例如,这是一个已关闭的错误报告:bugs.debian.org/cgi-bin/bugreport.cgi?
Shane H

1

我仅使用APC,因为APC是代码缓存,其作用类似于memcache!只有1个配置文件,而不是2个。

而且只有一个地方可以监视两个缓存.....


1

这取决于您在做什么,但对于在VPS上运行的drupal网站,我发现APC效果很好!如果您正在运行CentOS 6,它可以作为yum更新提供,因此非常容易安装,并且没有配置作为默认值是合理的。毫无头脑的恕我直言。

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.