跨两个点火缓存的原子操作

问题描述

我有两个ignite缓存。他们两个都使用键/值对(并且不涉及数据库)来存储一些数据。

cache1存储实际数据,而cache2存储一些元数据。要求是即使出现任何问题,也要确保两个缓存始终保持同步。

有没有一种方法可以确保两个更新都能保证发生?如果其中一项操作失败,则另一项操作也应回滚。

这是示例代码

cache1.put(someKey,someValue);
// some other code
cache2.put(anotherKey,anotherValue);

如何确保两个缓存都没有更新?

解决方法

是的,您需要use transactions。例如:

Ignite ignite = Ignition.ignite();

IgniteTransactions transactions = ignite.transactions();

try (Transaction tx = transactions.txStart()) {
  Integer hello = cache.get("Hello");

  if (hello == 1)
    cache.put("Hello",11);

  cache.put("World",22);

  tx.commit(); 
}

两个缓存都需要将atomicityMode参数设置为TRANSACTIONAL才能起作用(默认值为ATOMIC)。