2016-01-05 40 views
1

我想要做类似于这篇文章中描述的东西 http://vunvulearadu.blogspot.co.uk/2015/03/activeactive-mechanism-over-azure.html当我的一个实例从主服务器获取服务总线消息时,它会将一个项目添加到redis缓存中。然后,如果另一个实例正在处理副本上的消息副本,它可以首先检查该消息是否已被处理,如果是,则忽略它。是否有可能阻止两个进程写入相同的缓存项目?

这个问题,在我看来,如果两个实例试图同时处理消息(一个来自主要,一个来自次要),那么它们都可能从缓存中读取并且什么也没找到,然后写入缓存与此同时。所以我的问题是,如果他们同时写入缓存会发生什么。理想情况下,我希望一个失败,以便它可以假定另一个实例正在处理该消息。那可能吗?

回答

4

使用REDIS的SETNX(或MSETNX或HSETNX,取决于您要存储的数据的结构)功能。 它将写入该值当且仅当它尚未设置。 由于REDIS是单线程的,它将保证您只有第一个实例才会成功 - 只要您使用相同的密钥来存储数据。

+0

辉煌。谢谢。 – Ian1971

+0

我应该看看Redlock吗? – Ian1971

+0

如果我对你的问题的理解是正确的,那么你不需要。 Redlock提供了一种以可靠方式获取锁的方法,其中包含多个Redis实例。它提供高可用性。它不是为了将数据存储在缓存中而设计的。 –

相关问题