Php 处理缓存动态数据

Php 处理缓存动态数据,php,caching,Php,Caching,我正在使用一种叫做QuickCacheforPHP的东西,它提供网页的完整页面缓存。它工作得很好,但我唯一的问题是我有一个动态网站,当缓存打开时,某些东西不会以我希望的方式更新 例如,如果用户登录,登录框仍然会出现,即使用户登录到服务器(我可以转到站点的未缓存部分,它会显示登录的用户非常好)。更改用户设置等也是如此 我也不能每次用户登录或更改一个微小的设置时都转储缓存,这太过分了 似乎我不能缓存,因为它使网站不可用,我不缓存网站将在任何明显的负载下不可用 我应该如何解决这个问题?一般来说,我对缓

我正在使用一种叫做QuickCacheforPHP的东西,它提供网页的完整页面缓存。它工作得很好,但我唯一的问题是我有一个动态网站,当缓存打开时,某些东西不会以我希望的方式更新

例如,如果用户登录,登录框仍然会出现,即使用户登录到服务器(我可以转到站点的未缓存部分,它会显示登录的用户非常好)。更改用户设置等也是如此

我也不能每次用户登录或更改一个微小的设置时都转储缓存,这太过分了

似乎我不能缓存,因为它使网站不可用,我不缓存网站将在任何明显的负载下不可用


我应该如何解决这个问题?一般来说,我对缓存非常陌生——我第一次推出了一个用于生产的站点。当然,其他人已经解决了这个问题。

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

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


然后,仅在需要时清除include文件上的缓存,可能由cron每天清除,也可能由更改其中值的管理更新在代码中触发

我不是php爱好者,但我可以告诉你有关缓存的知识

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

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

不仅来自数据库的数据是缓存的候选对象。如果你有一个复杂的逻辑来处理数据,考虑缓存那个逻辑的输出。

库,你使用的文档很差,我找不到任何好的东西。 但我建议您使用Zend_Cache lib(如果您使用此框架)来创建自己的缓存系统。您将决定缓存什么以及如何缓存,因此这基本上是您可以实现的最佳效果

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


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

很抱歉恢复了一篇旧文章,但在阅读本文后,我觉得OP问题仍然非常相关

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

您需要做的是:

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

B.一旦找到好的“潜在候选对象”,通过重写/创建新的HTTP缓存指令使其可缓存

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

这是它的要点。类似的“学习”缓存机制的描述可在此处找到:

其中一个使用了类似的学习启发法来缓存动态内容和5分钟的刷新率以获得新鲜度


GL.

在浏览器的上下文中,应用程序内存是什么意思?