2011-04-14 33 views
2

我正在使用一种名为Quickcache for PHP,它提供了对网页的整页缓存。它工作的很好,但我唯一的问题是,我有一个动态网站,并且某些事情不会更新我打开缓存时所需的方式。处理缓存动态数据

例如,如果用户登录,登录框仍然会出现,即使对于用户登录的服务器(我可以访问未缓存的站点部分,它会显示用户登录非常好)。

我也无法每次用户登录或更改一个微小的设置时转储缓存,这将是矫枉过正。

看起来我无法缓存,因为它使网站无法使用,我不缓存该网站在任何可观的负载下都将无法使用。

我应该如何解决这个问题?我对通常的缓存很陌生 - 我第一次推出我的一个生产站点。当然其他人已经解决了这个问题。

回答

6

我不是一个PHP的人,但我可以告诉你有关缓存。

为每个用户生成内容的动态网站是最有效的操作,但它可以完成。它将要求您查看应用程序中数据的流向,以确定如何缓存,在何处缓存以及要缓存什么内容。下面是一些指导原则:

  • 数据不按用户或页面更改 - 缓存的应用程序内存和 抢它,而不是去到DB。
  • 数据每用户改变,但不 每页 - 在用户会话缓存
  • 数据每页改变,但每个用户不 - 使用 页面名称作为键
  • 数据缓存在应用程序内存每个用户每页更改 - 缓存会话的页面名称为 密钥
  • 每页请求唯一的数据 - 不缓存。

不仅来自数据库的数据是缓存的候选人。如果您有一块处理数据的复杂逻辑,请考虑缓存该逻辑的输出。

0

你会很幸运能有这么多的流量到您的网站马上,不是吗?

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

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

0

您使用的图书馆文档较差,我找不到任何好的内容。

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

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

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

0

对不起恢复旧帖子,但在阅读本文后,我觉得OP问题仍然非常相关。

从我所收集的信息来看,您在这里遇到的问题是个性化和新鲜度问题,这是处理动态网站时非常常见的问题。

你需要做的是:

A.显示器内容的使用,以确定被不断地重新提供服务(而不是缓存),动态对象。请注意,确定绝对是(100%)未改变的对象将有助于避免个性化相关的问题,因此您需要确保您使用交叉验证,坚如磐石的方法...(即检查大小,直到字节)

B.一旦找到好的“潜在候选人”,通过覆盖/创建用于缓存的新HTTP指令使其成为可缓存。 C.继续监测内容使用情况,不时重新加载新版本(经常),并将其与当前缓存对象进行比较,以保持新鲜。

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

一个里面使用了类似的学习试探法来缓存动态内容和5分钟的刷新率。 GLP。

GL。