我正在使用memcache来缓存对象,但是想添加像APC这样的操作码加速器.由于它们都涉及缓存,我不确定它们是否会"踩到彼此的脚趾",即我不确定memcache是否已经是OP代码加速器.
有人可以澄清吗?我想将它们用于两者 - 用于不同的事情.用于缓存我的对象的memcache和用于代码加速的APC
Memcache更像是分布式对象缓存而不是APC或XCache,它将PHP字节码存储在内存中,因此您不必每次都解析它.他们的主要目的是不同的.
例如,如果您有一个人们经常请求的CPU密集型数据库查询,您可以将生成的对象缓存在内存缓存中,然后引用它而不是一直重新运行该查询.
APC和XCache确实具有类似的对象缓存功能,但您仅限于主机.如果您希望10个不同的服务器都可以访问该对象而无需为每个服务器重新执行查询,该怎么办?你只需将它们引导到你的memcache服务器就可以了.如果您只有一台服务器,您仍然可以获益,因为如果您需要分支到更多的盒子,使用memcache将有助于您将来扩展.
要考虑的主要问题是,如果您认为您的应用需要扩展.Memcache有更多的开销,因为你必须使用TCP连接来访问它,而不仅仅是对APC/Xcache共享对象的函数调用.
但是,Memcache具有以下优点:
比磁盘或重新运行查询更快.
扩展到多个服务器.
使用许多不同的语言,您的对象不会仅限于PHP + APC/Xcache.
所有进程/语言都可以访问相同的对象,因此您不必担心PHP子进程是否具有空对象缓存.如果您正在运行PHP-FPM,这可能不是什么大问题.
在大多数情况下,我建议在memcache中缓存您的对象,因为它不会更难以及将来更灵活.
请记住,这仅适用于缓存对象.内存缓存确实不具有任何字节码或PHP加速功能,这就是为什么我会运行它与APC或XCache将并排侧