繁体   English   中英

Infinispan:锁定远程事务缓存

[英]Infinispan : locking in remote transactional cache

我们尝试使用 infinispan 作为带有读锁的远程缓存。 客户端正在使用“放置”进行读取以获取键上的锁定,如悲观事务缓存部分中描述的 infinispan 文档“当 cache.put(k1,v1) 返回时,k1 被锁定并且没有其他事务在集群中的任何地方运行都可以写入。读取 k1 仍然是可能的。当事务完成(提交或回滚)时释放 k1 上的锁。所以场景:

transactionManager.begin();
// read with put to acquire write lock
String value = getRemoteCache().get(key);
getRemoteCache().put(key, value);

// do smthing with the value

getRemoteCache().put(key, newValue);
transactionManager.commit();

远程缓存配置为带有悲观锁定的事务性:

   <local-cache name="default"> <locking isolation="REPEATABLE_READ" acquire-timeout="30000" concurrency-level="1000" striping="false"/>
        <transaction  mode="NON_XA" locking="PESSIMISTIC"/>
   </local-cache>

并且客户端正在使用配置访问 remoteCacheManager 作为 HOTROD 客户端:

  ConfigurationBuilder builder = new ConfigurationBuilder();
    // add more configurations ?
    builder.transaction().transactionManagerLookup(GenericTransactionManagerLookup.getInstance());
    builder.transaction().transactionMode(TransactionMode.NON_XA);
    builder.addServer().host(readServerHostConfiguration()).port(readServerPortConfiguration());
    return new RemoteCacheManager(builder.build(), true);

尽管客户端可以同时“读取和放置”一个值,但并发客户端在读取它时放置值时不会出现异常,但只有在稍后提交交易时才会出现异常。 这是预期的行为吗?

是的。

如文档( 热棒事务)中所述,在客户端上运行的事务具有乐观语义。 只有在提交期间才会获取锁。

悲观锁定事务仅在嵌入模式下有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM