我有一个服务器农场,每个服务器定期与数据库进行相同的查询。这些查询结果被缓存在共享缓存中,所有服务器均可访问。

我如何确保较新的查询不会被旧查询覆盖?例如,是否有一种方法可以以某种方式对查询进行版本处理,例如,这不会发生这种情况?如何处理并发查询?

谢谢!

编辑:DB是SQL Server。查询是一个选择语句。而且,缓存机制非常简单:简单写,没有锁定。那是因为当前无法告诉选项查询的顺序。

有帮助吗?

解决方案

一种方法是在数据库中具有全局更新计数器,要么进行更新或读取(更新更有效,但也很难正确正确)。

因此,在每次更新中,还会增加全局计数器。在每个读取上,读取全局计数器,并将数据与计数器值一起放入缓存中。仅在计数器值较大时覆盖缓存内容。

由于数据库隔离,交易应像以串行方式发生一样(假设您选择了可序列化的隔离级别)。反过来,这将意味着严格的计数器数与最新数据有关。

其他提示

缓存在哪里?是磁盘文件吗?还是数据库中的表格?

当您说较旧的查询可能会覆盖更新的查询时,这意味着什么?最新的查询(或者也许是最新的)是最新的查询吗?

您应该在执行每个查询之前锁定缓存容器,无论是文件还是表。每个服务器只能在获得锁定的情况下执行查询,否则应该等待锁定资源。这样,缓存将仅包含最新结果。

这是您要问的话吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top