0

我有一个设置,其中有 2 个 Web 服务器和一个中央 redis 服务器和一个 SQL 服务器。

我需要使用 redis 作为对 SQL 服务器进行查询的缓存。

因此,Web 服务器将首先检查 redis 缓存,然后再访问 SQL 服务器并缓存该结果。

但是,这两个 Web 服务器不知道另一个存在,因此它们无法替换“较新”的缓存结果。

我想避免这种情况:

时间线:

  • WebServer1 :检查redis的key,没有找到结果。
  • WebServer1:查询 Result1 的 SQL 服务器。
  • WebServer2 :将新数据保存到 SQL 服务器,从而更改查询结果。
  • WebServer2 :使 Redis 密钥无效。
  • WebServer2:查询 Result2 的 SQL 服务器。
  • WebServer2 :将 Result2 放入 Redis Key。
  • WebServer1 :将 Result1 放入 Redis Key。

上面的问题是最新结果“Result2”被“Result1”覆盖。

无论如何在Redis中避免这种情况?

4

1 回答 1

0

是的。使用锁来阻止任何其他查询,直到您从某个服务器完成查询/更新 redis。对此设置一个非常低的超时,这样你就不会阻塞太久。

如果你使用的是 Redis 2.6.12+,你可以使用Lua 的 SET 锁定模式。如果您使用的是早期版本,则可以使用SETNX 锁定模式

于 2013-10-28T19:41:14.147 回答