8.2. 隔离级别


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

这些隔离级别决定了读者何时看到并发写入,并使用不同的 MVCCEntry 类进行内部实施,它们在如何提交回数据容器时的行为不同。

以下是一个更详细的示例,它可以帮助了解 Data Grid 上下文中 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