php - 数据库变化检测

标签 php mysql database

我需要一种方法来检测我的数据库的更改,因为我正在客户站点上实现缓存系统。 (缓存整个页面,而不仅仅是查询)

在每一页的顶部(我有一个“母版页”,所以代码中只有一个地方)我查询数据库以查看它的 size is changed like so .

我对大小求和并得到一个“唯一”数字。将其与上一个进行比较,如果值相同,则传递缓存页面,如果不相同,则运行“正常”页面,然后将其缓存。

所以我认为理论上这可行,因为我只有 1 个数据库查询,并基于该查询将网站(缓存或未缓存取决于结果)交付给用户。

这行得通吗?如果行不通,为什么?

编辑:

检查上次更新时间戳怎么样? LINK

最佳答案

谁在更新数据库?建议导致更改的进程应该是使缓存无效的进程。当用户/管理员导致表发生更改时,您可以:

  • 如果管理员和面向公众的网站共享同一个应用程序空间(即它们是同一个应用程序),则只需在管理员进行更改时更新缓存即可。
  • 在某处设置一个状态位(也许是 session 变量),并定期检查以重新加载您的缓存数据。

建议大小不是“发生变化”的良好指标。忘记行 - 如果 bool/bit 值发生变化怎么办?这将满足使缓存无效的条件,但“大小”将始终相同。您可以使用上次更改日期时间来改进这一点,但您仍然遇到相同的基本问题 - 查询数据库以检查更改标志。有点违背了缓存的目的。

考虑另一种方法 - 每 n 分钟重新加载一次缓存。无论是否有变化,只需重新加载即可。 n 将是适合您的业务需求的值。您可能拥有陈旧的缓存,并在最多 n 分钟内提供旧/陈旧数据。这不是我的建议,而是需要考虑的事情。

关于php - 数据库变化检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148672/

相关文章:

php - 在基于 PHP 的系统上正确使用 Bootstrap 3 Tooltip

php - "Get"函数不起作用,因为不是所有的连字符都应该被替换

mysql - AzerothCore登录突然需要验证码

mysql - 如何将数据库从 Microsoft SQL Server 放到本地主机上的 phpMyadmin

python - Pandas "read_sql"UnicodeDecodeError

python - 在 django 中管理 redis 连接的正确方法

php - 有没有办法阻止图像显示

javascript - PHP Populate dropdown with ajax onchange issue 仅限 IE

php - 获取文本属格

php - 在 SELECT 查询中使用 *