代码之家  ›  专栏  ›  技术社区  ›  Ian1971

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

  •  1
  • Ian1971  · 技术社区  · 10 年前

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

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

    1 回复  |  直到 10 年前
        1
  •  4
  •   Pascal Le Merrer    10 年前

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