为PHP站点实现缓存的最佳方法是什么?显然,有些东西不应该被缓存(例如搜索查询),但我想找到一个好的解决方案,以确保我避免'挖掘效果'。
我知道有WordPress的WP-Cache,但我正在编写一个不是基于WP构建的自定义解决方案。我有兴趣编写自己的缓存(如果它足够简单),或者你可以指向一个漂亮,轻量级的框架。我不太了解Apache,所以如果它是一个PHP框架那么它会更合适。
感谢。
答案 0 :(得分:16)
您可以使用output buffering有选择地保存部分输出(要缓存的部分),如果时间不够长,则将其显示给下一个用户。这样,您仍然可以即时呈现页面的其他部分(例如,可自定义的框,个人信息)。
答案 1 :(得分:7)
最好的方法是使用代理缓存(Squid,Varnish)并提供适当的Cache-Control / Expires标头以及ETag:请参阅Mark Nottingham's Caching Tutorial以获取有关缓存如何工作以及如何使用的完整说明可以从缓存代理中获得最佳性能。
同时检查memcached,并尝试在那里缓存您的数据库查询(或更好的,预渲染的页面片段)。
答案 2 :(得分:7)
如果代理缓存是不可能的,并且您正在提供完整的HTML文件,那么您将完全绕过PHP获得最佳性能。研究WP Super Cache的工作原理。
将未缓存的页面复制到具有与您的站点类似的URL结构的缓存文件夹中。在以后的请求中,mod_rewrite注意到缓存文件的存在并代替它。其他RewriteCond指令用于确保评论者/登录用户看到实时PHP请求,但大多数访问者将直接由Apache提供服务。
答案 3 :(得分:4)
我建议Memcached或APC。两者都是内存缓存解决方案,包含简单的API和大量库。
这些2的问题是你需要在你的网络服务器或其他服务器上安装它们,如果它是Memcached。
所有大家伙(Facebook,Yahoo,Mozilla)使用
缺点:比APC慢
我不建议你自己写,有很多。如果您无法在网络服务器上安装软件,则可以使用基于磁盘的缓存,但可能存在种族问题需要处理。一个请求可能是写入文件而另一个请求正在读取。
您实际上可以缓存搜索查询,即使是几秒到一分钟。除非您的数据库每秒更新超过几次,否则会有一些延迟。
答案 4 :(得分:2)
PHP Smarty模板引擎(http://www.smarty.net)包含一个相当高级的缓存系统。
您可以在Smarty手册的缓存部分找到详细信息:http://www.smarty.net/manual/en/caching.php
答案 5 :(得分:1)
您似乎在寻找PHP缓存框架。 我建议你使用一个非常好的CacheSystem插件的模板系统TinyButStrong。 它简单,轻便,可定制(你可以缓存你想要的任何html文件的部分),非常强大^^
答案 6 :(得分:1)
简单缓存页面或页面的一部分 - Pear :: CacheLite类。我也使用APC和memcache来做不同的事情,但到目前为止我看到的其他答案更多的是更完整,更复杂的系统。如果你只是需要节省一些工作来重建页面的一部分 - Cache_lite与文件支持的存储是完全足够的,并且实现起来非常简单。
答案 7 :(得分:0)
Project Gazelle(一个开源的torrent网站)提供了在网站上设置Memcached的分步指南,您可以在任何其他可能要设置的网站上轻松使用该网站来处理大量流量
抓住源代码并阅读文档。