是一个只有PHP的“缓存引擎”值得吗?

时间:2010-03-20 09:54:22

标签: php caching

我为我的网络应用写了一个相当小的骨架,并认为我还会为它添加一个小缓存。

这很简单:

  • 如果当前页面作为缓存中的文件存在且文件不是太旧,请将其读出并退出而不是重建页面

  • 如果当前页面未缓存/过时,请重新显示页面并保存

然而,关于它的坏处是:

  • 我通过My​​SQL查询收到40个相对较长的帖子的页面的性能测试表明使用缓存,处理单个请求需要更长的时间(每个1000个测试)

  • 怎么会发生这种情况?

  • 如何进行MySQL查询,第一次循环结果,将结果传递给模板,然后第二次循环结果,比filemtime()检查和读数快

  • 我是否应该删除完整的原始PHP缓存并减轻某些PHP缓存(如memcached等)的可用性?

4 个答案:

答案 0 :(得分:2)

过早优化是万恶之源。如果您不需要缓存,请不要使用缓存。

话虽如此,如果您满足于不为每个请求提供动态内容,您可能需要考虑使用诸如清漆之类的缓存代理并完全删除PHP和Web服务器。甚至连第一行PHP都有相当多的开销,通过PHP提供静态文件有点脏。

如果您只想缓存元素,可以使用memcached或APC缓存等方法。 APC具有更容易获得的优势(如果您完全关心性能,则应该在服务器上安装APC用于操作码缓存)并且memcached可以选择让您拥有可由多个Web服务器访问的缓存(和/或多个缓存)

答案 1 :(得分:0)

我不这么认为,根据您的实施情况,似乎还有其他一些问题。以下是一些关于它的更多资源:

http://www.mnot.net/cache_docs/

http://blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/

答案 2 :(得分:0)

可能 -

如果你正在使用apc和mysql查询缓存(默认开启),那么你的php代码已经被执行并作为操作码存储在apc中,如果你反复点击同一个查询,那么mysql查询缓存也会缓存数据库结果。在这种情况下,大多数数据来自内存,因此您的文件读取速度可能会变慢。这种方法的真正好处是你将保存mysql连接的数量,但可能不是性能。

使用像squid这样的缓存代理应该是您的理想解决方案,以便直接从缓存中提供页面直到它过期。针对上述情况的另一个优化是在memcache中缓存mysql输出,这比命中mysql和查询缓存的大小要好。最后,如果您确实想要缓存生成的标记,可以使用输出缓冲(ob_start)并将输出直接存储在memcache中。

答案 3 :(得分:-4)

我想不是。

应用程序中最慢的部分可能是数据库流量。

如果包含HTML / PHP缓存文件,它应该更快。