2012-08-15 62 views
1

我主要想知道访问APC v。memcached(不是op-code cache)的对象缓存时速度差异是什么。 memcached的主要优点是它是分布式的,并不局限于本地机器。但是,由于它通过网络,因此存在某种延迟。是否值得在PHP(APC/memcached)中使用分步缓存?

我想知道访问APC(在机器上)和memcached(在另一个服务器上)之间的速度差是否足够大,以保证有一个分步缓存方案,程序首先尝试APC,然后是memcached,最后是数据库,如果一切都失败。

回答

1

像大多数其他所有:它取决于。

如果你有很多的计算,并可以存储结果,然后缓存将加快速度。如果你只是基本上存储数据库中的行,那么在内存缓存中会有所帮助,但memcached可能不会增加与数据库相比的巨大差异(假设db查询都很简单)。另一方面,如果你正在做复杂的查询,或者大量的编程工作来创建一些东西,那么缓存就更有意义了。

举一个例子,我最近在一个由第三方承包商编写的网站上工作,该承包商在设计期间没有做任何表演工作。它像牛一样缓慢,因为它有很多未优化的包括等等。添加APC基本上将性能提高了10倍。添加memached减少10 - 20毫秒的加载时间。

如果你足够远,然后做一些性能测试(查找xdebug,或其他工具),看看你的瓶颈在哪里,然后相应的计划。

0

请记住,如果您用其他东西填满APC缓存,APC将不得不重新计算您的页面的操作码。如果页面继续移除对象,这可能会导致问题,然后一旦页面运行对象,将继续移除页面。不好玩。

只是安全起见,不要试图将APC用于除配置值之外的其他任何内容,这些值不会导致您的页面被删除以腾出空间。

TL; DR一旦APC变满,您的网站就会变慢,您的服务器将工作得更加困难。

+0

APC使用两个单独的缓存:apc_cache和apc_user_cache。前者用于操作码,后者用于用户存储的对象。他们几乎是分开的。 – parent5446 2012-08-15 18:30:58

+0

@ parent5446,但我很确定他们共享相同的内存,如果需要,可以从其他人那里获取。 – Xeoncross 2012-08-15 18:58:11