8.4. 写入 Skews
当两个事务独立,同时读取和写入同一密钥时,会发生写入 skews。写入 skew 的结果是,两个事务都成功向同一键提交更新,但具有不同值。
Data Grid 自动执行写入框架检查,以确保特定事务中的 REPEATABLE_READ
隔离级别的数据一致性。这允许数据仓库检测并回滚其中一个事务。
在 LOCAL
模式下运行时,写入 skew 检查依赖于 Java 对象引用来比较区别,它提供了可靠的技术来检查写入 skews。
8.4.1. 在 pessimitic 事务中的密钥强制写入锁定
为避免使用 pessimistic 事务写入 skews,使用 Flag.FORCE_WRITE_LOCK
在启动时锁定密钥。
注意
-
在非事务缓存中,
Flag.FORCE_WRITE_LOCK
无法正常工作。get ()
调用读取键值,但不远程获取锁定。 -
您应该将
Flag.FORCE_WRITE_LOCK
与后续在同一事务中更新实体的事务一起使用。
比较 Flag.FORCE_WRITE_LOCK
示例的代码片段:
// begin the transaction if (!cache.getAdvancedCache().lock(key)) { // abort the transaction because the key was not locked } else { cache.get(key); cache.put(key, value); // commit the transaction }
// begin the transaction try { // throws an exception if the key is not locked. cache.getAdvancedCache().withFlags(Flag.FORCE_WRITE_LOCK).get(key); cache.put(key, value); } catch (CacheException e) { // mark the transaction rollback-only } // commit or rollback the transaction