0

出于缓存目的,我需要检查sql返回的数据集是否已更改。HTTP_IF_MODIFIED_SINCE将检查是否the file code已更改(如果我错了,请纠正我)。我需要一种方法来检查sql返回的结果是否已更改?这样做的最佳方法/方式是什么?谢谢。

4

4 回答 4

1

你可以使用 MD5(str);

if(md5($lastsql)==md5($nowsql)){}...

md5说明

于 2013-06-03T20:27:39.170 回答
1

我需要检查sql返回的数据集是否发生了变化

真正的答案是:你不能:)

当您没有返回时,您如何判断数据已更改?正确-您根本无法分辨!

当数据可能已更改时,根据您的假设调整缓存时间。没有简单的方法来决定这一点。缓存意味着权衡从数据库中获取新数据的成本以及您(您的用户)可以使用可能是旧数据的时间,并且并非每条数据都像其他数据一样可缓存。

数据库本身使用查询缓存,并且应该能够从其缓存中提供未更改的结果集(这样做智能,因为 PHP 可能会这样做)。但是,在多用户环境中,这些缓存往往会因为繁重的数据库流量而被提前释放。在这里,您可以帮助您制定自己的缓存策略。

于 2013-06-03T21:38:02.913 回答
0

HTTP_IF_MODIFIED_SINCE 将检查文件代码是否已更改(如果我错了,请纠正我)

如果它可以确定资源自指定日期以来没有更改,则标头告诉应用程序以状态代码进行If-Modified-Since响应。304

对于静态文件,通常是web服务器自己处理,修改日期就是静态文件的修改日期。

对于非静态资源,如 PHP 脚本,应用程序(即您的代码)必须自己处理 If-Modified-Since 标头。大多数应用程序没有。实现这一点的应用程序通常指的是数据的修改,而不是代码。

于 2013-06-03T19:57:16.403 回答
0

您可能正在做“乐观并发控制”。这通常涉及数据库中的“版本”字段,然后您可以将其用作 HTTP 中的“etag”。(那里的关键字是“条件GET”)

于 2013-06-03T20:11:32.360 回答