当前位置: 首页 > news >正文

襄阳网站制作公司有哪些Dw做html网站

襄阳网站制作公司有哪些,Dw做html网站,电子商务网站建设课设心得体会,网上卖东西怎么找货源这段内容讲解的是 Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制,包括它在不同隔离级别下的行为、锁的获取时机、事务冲突检测机制,以及在使用乐观事务时需要注意的一些关键点。下面我将 用通俗易懂的中文 为你详…

这段内容讲解的是 Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制,包括它在不同隔离级别下的行为、锁的获取时机、事务冲突检测机制,以及在使用乐观事务时需要注意的一些关键点。下面我将 用通俗易懂的中文 为你详细解释这段内容。


一、什么是乐观事务(OPTIMISTIC Transaction)

乐观事务模式 下,事务 不立即加锁,而是在事务提交时才进行冲突检测。如果检测到冲突(比如其他事务修改了相同的数据),事务就会失败。

锁的获取时机:

  • 两阶段提交(2PC)的第一阶段(prepare 阶段) 才对数据加锁。
  • 加锁顺序:
    • 先在主节点(Primary Node)上加锁;
    • 然后推广到备份节点(Backup Nodes);
  • 如果事务 回滚从未尝试提交,则 不会加任何锁

✅ 优点:性能好,适合并发冲突少的场景。
❌ 缺点:如果冲突多,可能会频繁失败,需要重试。


二、乐观事务下的隔离级别(Isolation Levels)

在 OPTIMISTIC 模式下,可以使用以下三种隔离级别:

1. READ_COMMITTED

  • 事务中修改的数据会收集在发起事务的节点上;
  • 提交时才会真正应用到缓存;
  • 读操作 不加锁,也不会缓存数据;
  • 数据可能从主节点或备份节点读取(取决于缓存配置);
  • 可能出现“不可重复读”(Non-Repeatable Read)
    • 即在同一个事务中多次读取某个 key,可能得到不同的值;
    • 因为其他事务可能在你第一次读之后修改了数据;
  • 不检查数据是否被修改过,也不会抛出乐观事务异常(TransactionOptimisticException)。

📌 举例:

  • 事务 A 读了 key=“name”,得到 “Alice”;
  • 事务 B 修改了 key=“name” 为 “Bob” 并提交;
  • 事务 A 再次读 key=“name”,得到 “Bob”;
  • 这在 READ_COMMITTED 下是允许的。

2. REPEATABLE_READ

  • 和 READ_COMMITTED 类似,唯一的区别是:
    • 读取的数据会被缓存在事务发起节点的本地事务映射中
    • 后续对该 key 的所有读取都使用本地缓存的值;
  • 保证事务中多次读取同一个 key,结果一致;
  • 不检查数据是否被修改过,也不会抛出乐观事务异常。

📌 举例:

  • 事务 A 读了 key=“name”,得到 “Alice”;
  • 本地缓存了这个值;
  • 事务 B 修改了 key=“name” 为 “Bob”;
  • 事务 A 再次读 key=“name”,仍然是 “Alice”。

3. SERIALIZABLE

  • 是最严格的隔离级别;
  • 在第一次读取某个 key 时,记录它的版本号;
  • 在事务提交时,检查所有涉及的 key 是否被其他事务修改过;
    • 如果发现某个 key 的版本号变了(即被其他事务修改),则事务失败;
    • 抛出 TransactionOptimisticException,并回滚事务;
  • 即使只是读了某个 key 而没有修改它,如果它的值被别人改了,事务也会失败
    • 因为这个 key 的值可能影响了你的事务逻辑;

📌 举例:

  • 事务 A 读了 key=“balance”,值为 100;
  • 事务 B 修改了 key=“balance” 为 200;
  • 事务 A 提交时,检测到 balance 被改过,事务失败并抛出异常;
  • 即使事务 A 没有修改 balance,只是读了它。

三、代码示例:使用乐观 + 可串行化事务

CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>();
cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
cfg.setName("myCache");
IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cfg);int retryCount = 10;
int retries = 0;while (retries < retryCount) {retries++;try (Transaction tx = ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC,TransactionIsolation.SERIALIZABLE)) {// 修改缓存cache.put(1, "foo");cache.put(2, "bar");// 提交事务tx.commit();break; // 成功提交,跳出循环} catch (TransactionOptimisticException e) {// 事务冲突失败,重试}
}

说明:

  • 使用 OPTIMISTIC + SERIALIZABLE 组合,可以保证数据一致性;
  • 如果事务失败,会抛出 TransactionOptimisticException
  • 建议使用 重试机制,比如最多重试 10 次;
  • 适用于并发冲突多、但又不想使用悲观事务的场景。

四、关于锁顺序的重要说明

虽然乐观事务不立即加锁,但在 READ_COMMITTEDREPEATABLE_READ 模式下,锁仍然是 按访问顺序逐个获取的

⚠️ 如果多个事务以不同的顺序访问相同的 key,可能导致死锁。

建议:

  • 统一访问 key 的顺序,避免死锁;
  • 尽量减少事务中涉及的 key 数量;
  • 对于高并发场景,优先考虑使用乐观事务 + SERIALIZABLE 隔离级别。

✅ 总结对比表

隔离级别是否缓存读取数据可重复读是否检测冲突是否抛出乐观异常适用场景
READ_COMMITTED❌ 不缓存❌ 不可重复读❌ 不检测冲突❌ 不抛出异常读多写少、一致性要求不高的场景
REPEATABLE_READ✅ 缓存在本地✅ 可重复读❌ 不检测冲突❌ 不抛出异常一致性要求较高、写操作较少的场景
SERIALIZABLE✅ 缓存在本地✅ 可重复读✅ 提交时检测冲突✅ 抛出异常高并发、强一致性要求的场景

🧠 使用建议

  1. 优先使用 OPTIMISTIC + SERIALIZABLE
    • 性能较好,同时能保证数据一致性;
    • 需要配合重试机制使用;
  2. 避免在事务中访问大量 key
    • 会增加冲突概率;
    • 增加事务失败的可能性;
  3. 统一访问 key 的顺序
    • 避免死锁;
  4. 在事务中只读取和修改必要的数据
    • 减少冲突;
  5. 处理乐观事务异常
    • 使用 try-catch 捕获 TransactionOptimisticException
    • 实现自动重试逻辑;

如果你正在使用 Ignite 的事务功能,尤其是 乐观事务模式,理解这些机制可以帮助你更好地设计事务逻辑,提升系统性能,并避免数据不一致问题。

http://www.yayakq.cn/news/441/

相关文章:

  • 网站设计项目策划ppt聊城网站推广公司
  • 网站建设与管理大学生职业规划什么网站做问卷好
  • 杭州的网站建设企业网站建设绪论
  • 网站建设流程的过程烟台优化网站公司
  • 网站微信登录怎么做的荣耀商城官网网站
  • 在网站上投放广告二手房装修
  • 创鑫时代广告公司简介北京网站优化外包
  • 最全做暖暖网站摘抄一小段新闻
  • a设计网站有哪些龙岗网站建设公司怎么样
  • 在哪个网站申请建设资质wordpress最近更新模块
  • 一站建设个人网站企业门户网站功能列表
  • 模板网站有利于做seo吗阿里云虚拟主机wordpress建站教程
  • 怎么制作网站布局seo网站外包公司
  • 惠州网站制作案例横沥建设网站
  • 做直播网站的上市公司免费做小程序的平台
  • 无成本搭建属于自己的网站江门市做网站
  • 书籍教你如何做网站百度人工电话多少号
  • 做软件常用的网站网站模板预览
  • 建一个网站得多少钱岳阳公司网站建设
  • 遵义建站wordpress 文章保存在哪里
  • 做网站 信息集成过程的顺序网站域名归属权
  • 人才共享网站的建设方案怎么写广州知名设计公司排名
  • 手机免费创建网站的软件wordpress网站防采集
  • 印刷网站建设价格阀门网站建设
  • 建设部执业资格网站钱追得回吗
  • 南昌p2p网站建设公司在线平台教育网站开发
  • 沈阳网站制作公司东台网站建设服务商
  • 郑州网站建设 股权投资wordpress reeoo 主题
  • 企业网站建设的主要目的是杭州建设信用网网站
  • 陕西省建设集团公司网站wordpress添加文章分类二级