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

标签 azure redis azureservicebus

我想做一些类似于本文中描述的事情 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/

相关文章:

azure - MSAL token 将在 1 小时后过期

azure - 如何覆盖azure应用程序服务中的主机http header ?

python - Python中Redis连接池的正确使用方式

Azure OracleVM : Change VM Type

powershell - Login-AzureRmAccount : The term 'Login-AzureRmAccount' is not recognized as the name of a cmdlet, 函数、脚本

node.js 使用 Redis 使用 ttl 创建作业

spring - 如何使用Spring Data Redis存储库指定geo radius命令附加参数?

azure - 我们可以在 Azure VM 中创建 Azure 服务总线(用于调试工作流和远程事件接收器)吗

azure - ASP.NET Core Web 应用程序作为 Azure 服务总线使用者/接收者

Azure 服务总线代理消息安全