处理缓存动态数据


Handling caching dynamic data

我正在使用PHP的Quickcache,它提供了网页的全页缓存。它工作得很好,但我唯一的问题是,我有一个动态的网站,和某些事情不更新的方式,我希望他们缓存时打开。

例如,如果用户登录,登录框仍然会出现,即使用户登录到服务器(我可以去到网站的一个未缓存的部分,它会完全显示用户登录)。更改用户设置也是如此。

我也不能在每次用户登录或更改一个小设置时转储缓存,那将是多余的。

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

我该如何解决这个问题?一般来说,我对缓存还是个新手——我是第一次将我的一个站点用于生产。

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

为每个用户生成内容的动态站点是最难以有效做到的,然而,这是可以做到的。这将要求您查看数据在应用程序中的流动方式,以便确定缓存的方式、位置和内容。以下是一些指导原则:

  • 每个用户或每个页面不更改的数据-缓存在应用程序内存和
  • 每个用户更改但不更改的数据
  • 用户会话中的缓存
  • 每页更改但不更改的数据每个用户-使用应用程序内存中的缓存页名作为键
  • 每个用户每页更改的数据-在会话中缓存页名为关键
  • 每个页面请求的数据是唯一的-不缓存

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

如果你的网站马上有这么多流量,你就很幸运了,不是吗?

不确定这个特殊的工具"快速缓存"是如何工作的,但从概念上讲,你想做的是有一个顶级的PHP文件,包括可以缓存的部分,这样你就可以从缓存的副本加载半静态部分,并在每次加载时加载包含动态内容的顶级文档。我相信Smarty允许你用模板来做这些。对于简单的情况(以及一些不那么简单的情况),我通常编写自己的代码。

然后仅在需要时清除包含文件上的缓存,可能每天由cron或由代码中的管理更新触发,该更新更改了那里的值。

你使用的库文档很差,我找不到任何好的

但是我建议使用Zend_Cache库(如果你使用这个框架)创建你自己的缓存系统。你将决定缓存什么以及如何缓存,所以这基本上是你能达到的最佳效果。

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

这是我能建议的最好的方法,因为你不想缓存一些动态动作(路由)。您可以简单地将它们从将要创建的缓存系统中排除。我对复杂的查询做了类似的事情,但是你可以缓存所有的东西。当你在页面上更改某项内容后,你可以刷新缓存

很抱歉重提一篇旧文章,但在阅读了这篇文章之后,我觉得OP的问题仍然非常相关。

从我收集到的,你这里有一个个性化和新鲜度的问题,在处理动态网站时非常常见的问题。

你需要做的是:

。监视内容使用情况,以识别经常被重新服务(但不缓存)的动态对象。请注意,确定绝对(100%)未更改的对象将有助于避免个性化相关问题,因此您需要确保使用交叉验证,可靠的方法……(即检查大小,精确到字节)

B。一旦找到了好的"潜在候选",通过重写/创建新的HTTP缓存指令使其可缓存。

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

这是它的要点。一个类似的"学习"缓存机制的描述可以在这里找到:动态缓存。

里面的一个使用了类似的学习启发式来缓存动态内容和5分钟刷新率来获取新鲜度。

GL。