使用多台计算机的外部查询结果更新Redis

时间:2013-10-26 16:45:04

标签: caching transactions locking redis

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

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

因此,在转到SQL服务器并缓存该结果之前,Web服务器将首先检查redis缓存。

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

我想避免这种情况:

时间表:

  • WebServer1:检查redis是否有密钥,但未找到任何结果。
  • WebServer1:查询Result1的SQL服务器。
  • WebServer2:将新数据保存到SQL服务器,以更改查询结果。
  • WebServer2:使Redis密钥无效。
  • WebServer2:查询Result2的SQL服务器。
  • WebServer2:将Result2放入Redis密钥。
  • WebServer1:将Result1放入Redis密钥。

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

在Redis中有没有避免这种情况?

1 个答案:

答案 0 :(得分:0)

是。使用锁定来阻止任何其他查询,直到您从某个服务器查询/更新redis。设置一个非常低的超时,所以你不会阻塞太长时间。

如果您使用的是Redis 2.6.12+,则可以使用SET locking pattern with Lua。 如果您使用的是早期版本,则可以使用SETNX locking pattern