我能否在同一台服务器上同时使用APC和memcached?

7
我正在使用memcache进行对象缓存,但是我想增加一个类似APC的opcode加速器。由于它们都涉及缓存,我不确定它们是否会互相干扰,即我不确定memcache是否已经是一个OP代码加速器。
有人能澄清一下吗?我想同时使用它们 - memcache用于缓存我的对象,而APC用于代码加速。
2个回答

19

Memcache更像是分布式对象缓存,而不像APC或XCache那样将PHP字节码存储在内存中以避免每次解析。它们的主要目的不同。

例如,如果您有一个非常耗费CPU的数据库查询,人们经常请求该查询,您可以将结果对象缓存到memcache中,然后引用它,而不是每次重新运行该查询。

APC和XCache确实具有类似的对象缓存功能,但受限于主机机器。如果您想让10个不同的服务器都能访问那个对象,而无需为每个服务器重新执行查询怎么办?您只需将它们指向您的memcache服务器即可。如果仅有一个服务器,仍然会获得好处,因为使用memcache将帮助您在未来进行扩展,以便需要扩展到更多设备。

主要问题在于您是否认为您的应用程序需要扩展。与APC / Xcache共享对象相比,由于必须使用TCP连接访问它,因此Memcache具有更多开销。

然而,Memcache具有以下优点:

  • 比磁盘或重新运行查询更快。
  • 可扩展到多个服务器。
  • 适用于许多不同的语言,您的对象不仅局限于PHP + APC / Xcache。
  • 所有进程/语言都可以访问相同的对象,因此您不必担心PHP子进程是否具有空对象缓存。如果您正在运行PHP-FPM,则可能并不是太大的问题。

在大多数情况下,我建议将对象缓存在memcache中,因为它并不比其他方法更难,并且对未来更具灵活性。

请记住,这仅涉及缓存对象。Memcache没有任何字节码或PHP加速功能,这就是为什么我会将其与APC或XCache一起运行的原因。


就算你只有一台服务器,使用memcache仍然会有好处,因为如果以后需要扩展到更多的服务器,它能帮助你进行规模化。所以,单个服务器也是有好处的。 - nickf
@nickf,我在我的回答中增加了更多细节。 - Klinky
2
另外需要补充的一点是:APC 不如 memcached 处理高并发。我们在生产环境中同时使用 memcached 和 APC 存储适当的应用程序数据,而且我们正在考虑开始使用 Redis(用于持久性和列表操作)。在高并发水平下,每个工具都擅长某些其他工具不擅长的事情。 - Frank Farmer
在我看来,APC数据缓存比memcached快6-8倍。https://dev59.com/v3I-5IYBdhLWcg3wj5FG - Stann
@nickf 这真的取决于你特定的设置和要求 - 像往常一样。例如,使用 memcache(d) 与 WordPress 可以在请求和页面之间缓存对象。这不能通过 WordPress 核心/默认功能完成。因此,即使在一个服务器上,Memcache(d) 也提供了巨大的好处。 - Phill Healey

4
是的,您可以同时使用它们。

@SankalpSingha 为什么这很荒谬?难道它们不能同时使用吗?我想在我的opcode缓存中使用APC,在我的php会话存储中使用memcached。这不是一个好主意吗?为什么? - Michael Fever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接