处理缓存动态数据

时间:2011-04-14 04:07:30

标签: php caching

我正在使用名为Quickcache for PHP的东西来提供网页的整页缓存。它工作得很好,但我唯一的问题是我有一个动态网站,并且在启用缓存时某些事情不会按照我希望的方式更新。

例如,如果用户登录,登录框仍将显示,即使用户登录的服务器也是如此(我可以访问该网站的未缓存部分,它将显示用户完美登录精细)。同样适用于更改用户设置等。

每次用户登录或更改微小设置时,我也无法转储缓存,这样做太过分了。

似乎我无法缓存,因为它使网站无法使用,而且我不缓存该网站在任何明显的负载下都将无法使用。

我该如何解决这个问题?我对一般的缓存很新 - 我第一次推出我的一个网站进行制作。当然其他人已经解决了这个问题。

4 个答案:

答案 0 :(得分:6)

我不是一个php人,但我可以告诉你缓存。

为每个用户生成内容的动态网站是最有效的方法,但是,它可以完成。它需要您查看数据在应用程序中的流动方式,以确定缓存的方式,位置和内容。以下是一些指导原则:

  • 每个用户或每页不会更改的数据 - 缓存在应用程序内存和 抓住它而不是去DB。
  • 每个用户更改但未更改的数据 每页 - 用户会话中的缓存
  • 每页更改但未更改的数据 每个用户 - 使用应用程序内存缓存 页面名称为键
  • 每页每位用户更改的数据 - 缓存在会话中,页面名称为 键
  • 每页请求唯一的数据 - 请勿缓存。

不仅数据库中的数据是缓存的候选者。如果您有一个操作数据的复杂逻辑块,请考虑缓存该逻辑的输出。

答案 1 :(得分:0)

你很幸运能够立即为你的网站带来如此多的流量,不是吗?

不确定这个特定工具“Quickcache”是如何工作的,但从概念上讲,你想要做的是拥有一个顶层PHP文件,其中包含可以缓存的部分,以便从缓存中加载半静态部分副本和包含每个负载上的动态内容的顶级文档。 Smarty允许您使用我相信的模板执行此操作。对于简单的情况(有些不那么简单),我通常会编写自己的代码。

然后根据需要清除包含文件上的缓存,可能每天由cron清除,或者在代码中通过更改值的管理更新触发。

答案 2 :(得分:0)

你使用的图书馆文档很差,我找不到任何好的东西。

但我建议使用例如Zend_Cache lib(如果你使用这个框架)制作自己的缓存系统。您将决定缓存什么以及如何缓存,这基本上是您可以实现的最佳效果。

页面加载后,您将检查缓存中的页面,如果在那里,请使用它。

这是我建议的最佳方式,因为您不想缓存一些动态操作(路由)。你可以简单地从你将要制作的缓存系统中排除它们。我用复杂的查询做类似的事情,但你可以缓存一切。在您更改页面后,您可以刷新缓存。

答案 3 :(得分:0)

很抱歉要复活一篇旧帖子,但看完之后我觉得OP问题仍然非常重要。

从我收集到的内容来看,您所拥有的是个性化和新鲜度问题,这是处理动态网站时非常常见的问题。

您需要做的是:

一个。监视内容使用情况以识别经常重新提供(但未缓存)的动态对象。请注意,识别绝对(100%)未更改的对象将有助于避免与个性化相关的问题,因此您需要确保使用交叉验证,坚如磐石的方法...(即检查大小,向下到字节)

B中。一旦好的"潜在的候选人"找到,通过覆盖/创建用于缓存的新HTTP指令使其成为Cachable。

℃。继续监控内容使用情况,不时(经常)重新加载新版本并将其与当前缓存对象进行比较,以保持新鲜。

这是它的要点。对类似"学习"的描述缓存机制可以在这里找到:Dynamic Caching

内部使用类似的学习启发式来缓存动态内容和5分钟刷新率以获得新鲜感。

GL