【发布时间】:2011-01-17 04:09:24
【问题描述】:
我有一个不知道如何解决的缓存方案。我能够毫无问题地缓存静态页面,但在处理动态页面时遇到了一些问题。
在动态页面中,逻辑是这样的:
//第一部分
- 页面请求的一些处理(第 3 部分需要)
- 回显一些信息
//第二部分
回显用户特定菜单 + 一些用户特定信息
//第三部分
回显页面的其余部分
问题是,如果我缓存整个页面,然后读取缓存,那就不行了( 第 2 部分将不正确,因为它取决于用户)。
缓存页面,我只是使用
“ob_start();”在文件的开头,然后将 ob_get_contents() 保存到文件中,然后“ob_end_flush();”最后。
如果文件已存在于缓存中且未过期,我会:“include(file);”和“退出”;
我尝试将缓存拆分为两个文件,但第 2 部分和第 3 部分取决于第 1 部分的一些 php 处理我很难...
有人对如何解决这个问题有任何想法吗?如果我不是很清楚,请告诉我,我将重新提出问题。谢谢!
【问题讨论】:
-
您能解释一下为什么要缓存这个吗?是为了防止查询数据库吗?
-
是的,它是为了防止查询数据库。我正在缓存查询,但也想缓存 html 以防止每个查询的所有缓存命中(有很多计数器被查询)。不幸的是,我目前无法使用 memcached。我根本不想缓存第 2 部分,我不介意每次都生成它,但我无法实现第 1 部分和第 3 部分的缓存并使它们一起工作。
-
无论如何,我建议您编写一个函数来生成每个部分,并让该函数处理该部分的缓存。另外请记住,如果您还没有结束它们,则不能连续运行
ob_start。 -
代码有点棘手,我知道你不能连续运行ob_start,谢谢!