【问题标题】:Php simple caching technique for small-mid size websites中小型网站的php简单缓存技术
【发布时间】:2009-10-05 19:06:46
【问题描述】:

我正在寻找使用 php 的中小型网站的 HTML/文本内容缓存。我将主要保存站点的动态导航菜单、从数据库生成的 HTML 报告等。主要是我正在寻找基于会话的缓存(这是一个坏主意吗?)。它也可以是基于文件的。

非常感谢任何现有的解决方案。例如 Zend Framework 以其松散耦合的组件而闻名。因此,Zend_Cache 可以作为候选,但找不到基于会话的缓存适配器。而且,它不是完全独立的组件。谁能告诉我使用 Zend_Cache 需要学习哪些类?

另一个选择是 PEAR 的 - Cache_Lite,您对此有何看法?

是否有任何其他框架,我可以从中轻松分离缓存组件并以更少的学习曲线使用它?

谢谢。

【问题讨论】:

  • 假设我的共享主机服务器不支持 APC 或 memcached,所以我需要实现自己的缓存机制。

标签: php session caching


【解决方案1】:

我想到了 Memcached,它是一个真正轻量级且高效的解决方案。

但您也可以将内容缓存在简单文件中。文件系统通常很快,并且可以毫无问题地处理读/写锁。并且不需要任何花哨的库来处理它...函数 filemtimefile_put_contentsfile_get_contents 就是你所需要的。

  1. 使用 filemtime() 检查缓存是否在 N 秒前被写入
  2. 如果太旧,生成内容并用 file_put_contents() 写入
  3. 如果没有,只需使用 file_get_contents() 加载它

编辑:我将添加一个链接到我几个月前发布的那个帖子:Best Solution for caching。它并不完全是关于主题的,但它可能会对你的研究有所帮助:)

【讨论】:

    【解决方案2】:

    基于会话的缓存可能不是一个好主意。它仅适用于您需要为每个用户缓存特定结果的有限情况(不适合所有人)。

    APC 部署非常广泛,所以如果您可以访问它,我会在后端使用 APC 来研究 Zend_Cache。如果 APC 不可用,后端带有平面文件的 Zend_Cache 对于中小型网站应该足够了

    【讨论】:

      【解决方案3】:

      JPCache 是一个不错的轻量级缓存库。

      【讨论】:

        【解决方案4】:

        您可以查看CakePHP 中的缓存。我怀疑您能否将其与框架分开,但它应该可以帮助您了解如何缓存动态内容。

        【讨论】:

          【解决方案5】:

          大部分 php 缓存库都是使用output buffer control functions 实现的。 您可以用同样的方式实现您自己的非常简单的缓存。

          <?php
          
          function callback($buffer)
          {
            // Code to store output in cache
          }
          
          if (/* Test cached copy is still valid */) {
              /* Output cached copy to browser */
              exit(0);
          }
          
          ob_start("callback");
          ?>
          
          <html>...</html>
          
          <?php
          ob_end_flush();
          ?>
          

          您可以根据需要省略ob_end_flush(),因为它会在输出结束时自动触发。

          值得注意的是,这种结构可以包裹在比页面更小的单元上。例如,您提到仅缓存导航菜单。您需要在要缓存的块周围多一些逻辑,但原理是一样的。

          【讨论】:

            猜你喜欢
            • 2011-08-20
            • 2019-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-08
            • 2012-04-29
            • 1970-01-01
            • 2022-11-09
            相关资源
            最近更新 更多