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

Is it possible to prevent two processes writing to the same cache item?

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

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

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