10.2. 隔离级别


Data Grid 提供两种隔离级别 - READ_COMMITTEDREPEATABLE_READ

这些隔离级别决定了读取器何时看到并发写入,并在内部使用 MVCCEntry 的不同子类实现,其在状态重新提交到数据容器的方式上具有不同的行为。

下面是一个更详细的示例,它应该帮助了解数据网格上下文中 READ_COMMITTEDREPEATABLE_READ 之间的区别。使用 READ_COMMITTED 时,如果同一键的两个连续读取调用之间,密钥已被另一个事务更新,第二个读取可能会返回新的更新值:

Thread1: tx1.begin()
Thread1: cache.get(k) // returns v
Thread2:                                       tx2.begin()
Thread2:                                       cache.get(k) // returns v
Thread2:                                       cache.put(k, v2)
Thread2:                                       tx2.commit()
Thread1: cache.get(k) // returns v2!
Thread1: tx1.commit()
Copy to Clipboard Toggle word wrap

使用 REPEATABLE_READ 时,最终的 get 仍会返回 v。因此,如果您要在事务中多次检索同一密钥,您应该使用 REPEATABLE_READ

但是,即使对于 REPEATABLE_READ,也不会获得 read-locks,因此可能会发生这种现象:

cache.get("A") // returns 1
cache.get("B") // returns 1

Thread1: tx1.begin()
Thread1: cache.put("A", 2)
Thread1: cache.put("B", 2)
Thread2:                                       tx2.begin()
Thread2:                                       cache.get("A") // returns 1
Thread1: tx1.commit()
Thread2:                                       cache.get("B") // returns 2
Thread2:                                       tx2.commit()
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat