适用于中小型网站的Php简单缓存技术

时间:2009-10-05 19:06:47

标签: php session caching

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

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

另一种选择是PEAR - Cache_Lite,你对此有什么看法?

是否还有其他框架,我可以轻松地将缓存组件分开并以较少的学习曲线使用它?

感谢。

5 个答案:

答案 0 :(得分:2)

Memcached浮现在脑海中,作为一种非常轻巧高效的解决方案。

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

  1. 使用filemtime()
  2. 检查缓存是否已写入超过N secondes前的值
  3. 如果它太旧,请生成内容并使用file_put_contents()
  4. 编写内容
  5. 如果没有,只需用file_get_contents()
  6. 加载它

    编辑:我会在几个月前添加一个指向该帖子的链接:Best Solution for caching。这不完全是主题,但它可能会帮助你的研究:)

答案 1 :(得分:1)

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

APC的部署非常广泛,所以如果你有权访问它,我会在后端查看带有APC的Zend_Cache。如果APC不可用,后端带有平面文件的Zend_Cache应该足够用于中小型网站

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

大多数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(),因为它会在输出结束时自动触发。

有趣的是,这个结构可以包裹在比页面更小的单元周围。例如,您只提到了导航菜单的缓存。你需要在块周围加一些逻辑来缓存,但原理是一样的。