我想做一些类似于本文中描述的事情 http://vunvulearadu.blogspot.co.uk/2015/03/activeactive-mechanism-over-azure.html当我的一个实例从主实例获取服务总线消息时,它会向 Redis 缓存添加一项。然后,如果另一个实例正在辅助实例上处理该消息的副本,它可以首先检查该消息是否已被处理,如果是,则忽略它。
问题是,在我看来,如果两个实例都尝试同时处理消息(一个来自主实例,一个来自辅助实例),那么它们有可能都从缓存中读取,但什么也没找到,然后写入缓存同一时间。所以我的问题是,如果它们同时写入缓存会发生什么。理想情况下,我希望一个实例失败,以便它可以假设另一个实例正在处理该消息。但这可能吗?
最佳答案
使用SETNX (或 MSETNX 或 HSETNX,具体取决于要存储的数据的结构) REDIS 的功能。 当且仅当该值尚未设置时,它才会写入该值。 由于 REDIS 是单线程的,它将保证只有第一个实例才会成功 - 只要您对数据使用相同的 key 。
关于azure - 是否可以防止两个进程写入同一个缓存项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616866/