Apache Ignite复制缓存竞争条件?

Apache Ignite复制缓存竞争条件?,ignite,distributed-caching,Ignite,Distributed Caching,我是Apache Ignite的新手,所以请温柔一点。我的问题很简单。 如果我有一个使用ApacheIgnite的复制缓存。我向这个缓存密钥123写入数据。我的集群有10个节点 第一个问题是: 复制缓存是否意味着在put调用返回之前,必须将密钥123写入所有10个节点?或者,呼叫是否立即返回,复制是否在幕后完成 第二个问题是: 假设键123写在节点1上。它现在被复制到所有其他节点。然而,几微秒后,节点2尝试使用不同的值写入键123。我现在有比赛条件吗?或者Ignite是否以某种方式处理这种情况,

我是Apache Ignite的新手,所以请温柔一点。我的问题很简单。 如果我有一个使用ApacheIgnite的复制缓存。我向这个缓存密钥123写入数据。我的集群有10个节点

第一个问题是:

复制缓存是否意味着在put调用返回之前,必须将密钥123写入所有10个节点?或者,呼叫是否立即返回,复制是否在幕后完成

第二个问题是: 假设键123写在节点1上。它现在被复制到所有其他节点。然而,几微秒后,节点2尝试使用不同的值写入键123。我现在有比赛条件吗?或者Ignite是否以某种方式处理这种情况,在节点1的put跨所有节点复制之前,节点2不会尝试写入密钥123

在某些情况下,我试图构建一个跨API机器集群的重复数据消除系统。我希望我能够为我的API请求创建一个哈希,只使用使请求唯一的值,并将其写入Ignite缓存。只有当缓存尚未包含可能由其他API实例创建的唯一哈希时,API请求才会继续。当然,缓存会有一个逐出策略,在几秒钟后逐出这些缓存键,因为它们不再需要了。

复制缓存与使用无限数量的备份和一些优化进行分区相同。因此,它有主分区,这些分区根据需要分布在节点之间

现在,当您执行更新时,请求到达主节点,而主节点则更新所有备份。属性负责更新条目的方式。默认情况下,它是PRIMARY_SYNC,这意味着调用put的线程将只等待主分区更新,备份将异步更新。如果将其设置为“完全同步”,则只有在更新所有备份时才会释放线程

在回答第二个问题时,将不存在竞争条件,因为所有请求都将到达主节点

除此之外,若备份节点还并没有更新,get请求将转到主节点,所以在主同步模式下,若主分区有一个值,你们将永远不会得到null