是否可以防止两个进程写入同一缓存项?

时间:2016-01-05 16:45:16

标签: azure redis azureservicebus

我想做一些类似于本文所述的内容 http://vunvulearadu.blogspot.co.uk/2015/03/activeactive-mechanism-over-azure.html当我的一个实例从主服务器获取服务总线消息时,它会向redis缓存添加一个项目。然后,如果另一个实例正在处理辅助节点上的消息副本,它可以首先检查该消息是否已被处理,如果是,则忽略它。

问题在我看来,如果两个实例同时尝试处理消息(一个来自主服务器,一个来自辅助服务器),那么他们可能都从缓存中读取并找不到任何内容,然后写入缓存中同一时间。所以我的问题是,如果他们同时写入缓存会发生什么。理想情况下,我希望一个失败,以便它可以假设另一个实例正在处理消息。这可能吗?

1 个答案:

答案 0 :(得分:4)

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