请你帮我解决以下问题:
我有以下分区缓存群集配置:
启用了writeThrough的服务器节点。他们可以通过cacheStoreFactory=HibernateCacheStoreFactory
没有writeThrough配置但使用clientMode=true
我执行put on client node,然后我看到,这个数据被发送到服务器节点,但是服务器节点只执行put到缓存,但是不调用cacheStoreFactory(writeThrough行为)。因此,数据仅缓存在群集中,但不会写入数据库。
如果我将writeThrough配置添加到客户端节点,当然会调用writeThrough,但我想从客户端节点中删除对Hibernate的任何依赖。
此外,如果我在服务器端启用writeBehind配置,则调用writeThrough功能并且服务器节点将数据从客户端节点异步写入数据库。但它不能满足我的要求,因为我想在一次交易中从客户端节点执行看跌期权。
在没有writeBehind的事务中,是否可以通过具有writeThrough的服务器节点从客户机节点执行put来存储数据?
答案 0 :(得分:3)
事务性缓存从发起事务的节点写入持久性存储(在您的情况下,它是客户端节点)。这样做是因为事务可能包含存储在不同节点上的条目,如果存储也将从不同节点更新,则无法在缓存和数据库之间保持事务一致性。
如果您无法访问客户端上的数据库,则可以向其中一个服务器发送一个闭包并在那里启动一个事务,如下所示:
Ignition.ignite().compute().run(new IgniteRunnable() {
@IgniteInstanceResource
private Ignite ignite;
@Override public void run() {
try (Transaction tx = ignite.transactions().txStart()) {
// Cache operations go here...
tx.commit();
}
}
});