PHP - Memcache - HTML缓存

时间:2009-11-06 17:30:58

标签: php caching memcached

我想创建一个可以绕过某些机制的缓存系统,以提高性能。

我有一些例子:

1-)我有一个动态的PHP页面,每小时更新一次。每个用户的页面内容都相同。所以在这种情况下我可以:

a)创建一个HTML页面,该页面可以每小时生成一次。在这种情况下,我想绕过PHP,因此应该有一个静态页面,如果数据库更新,将生成一个新的HTML文件。我怎样才能做到这一点?我可以创建一个生成HTML文件的crontab脚本,但它看起来并不优雅。

b)将输出缓存在内存中,因此Web服务器将每小时更新一次内容。我想我需要一个用于Web服务器的内存缓存模块。有一个非官方的memcache模块用于lighttpd,但它似乎不稳定,我也听说过nginx的memcache模块,但不知道这是否可行。这种方式似乎更优雅和可能,但如何?有任何想法吗? (同样,我想在这种情况下绕过PHP)

另一个例子是我有一个每小时更新的动态PHP页面,在该页面中只有用户详细信息部分是完全动态的(因此用户登录或注销并在该部分中查看他/她的状态)

同样,我如何为此页面创建缓存系统?我想,如果我能找到第一个例子的解决方案,那么我可以在同一个解决方案中使用AJAX。我是对的吗?

编辑:我想,我无法说清楚。我想完全绕过PHP。 PHP脚本将每小时运行一次,之后不会进行任何PHP调用。我想删除它的开销。

提前致谢,

3 个答案:

答案 0 :(得分:1)

使用静态HTML。每小时只需使用您的输出更新静态HTML文件。您需要使用每小时 cron 来运行PHP脚本到 fopen() fwrite()到该文件。没有必要点击PHP来检索页面。只需为该特定页面制作.htaccess mod_rewrite重定向规则,以维护当前的URL命名。

虽然不是很优雅,静态HTML gzip压缩对我来说效率更高并且会使用更少的带宽

使用cron每小时运行PHP脚本的示例:

// run this command in your console to open the editor
crontab -e

输入以下值:

01 * * * * php -f /path/to/staticHtmlCreater.php > /dev/null

最后一部分确保您不会有任何输出。这个cron将在每小时的第一分钟运行。

<强>更新

我错过了有关您的动态用户个人资料信息的部分,或者是在我的初始评论之后添加的部分。如果您只使用单个服务器,我建议您切换到APC,它比memcached(对于单个服务器应用程序)更快地提供操作码缓存和缓存机制。如果用户的配置文件数据低于折叠(在用户的窗口视图下方),则可能等待发出AJAX请求,直到用户向下滚动到指定点。您可以在Facebook状态页面上看到此功能。

答案 1 :(得分:0)

如果这只是一个Web服务器,您可以使用PHP的APC模块来缓存页面内容。它并不是真正设计用于缓存整个页面,但它应该在紧要关头。

编辑:我忘了提到APC尚未附带PHP,但可以从PECL安装。它将作为PHP 6的一部分发布。

答案 2 :(得分:0)

一种很好的方法是将静态内容存储在文件中。事情应该像这样:

  • 您的PHP脚本被称为
  • 如果您的内容文件已被修改超过1小时前(width filemtime($ yourFile))
    • 重新生成内容+将其存储在文件中+将其发送回客户端
  • 否则
    • 按原样发送文件内容(使用文件($ yourFile)或echo file_get_contents($ yourFile)

在每种情况下都能很好地工作,即使在重负荷下也是如此。