美文网首页
从结算业务 深入理解 并发,mysql 乐观锁,可重复读

从结算业务 深入理解 并发,mysql 乐观锁,可重复读

作者: 川流不息attitude | 来源:发表于2022-09-29 18:36 被阅读0次

从结算业务 深入理解 并发,mysql 乐观锁,可重复读

结算 一般就是 ,把一些未结算的订单 金额,周期性的 结算 到 对应的账户 表里面去。

一般就是 通过定时任务 分批跑,比如每个月 几号 结算一次 给供应商。

思路一:

根据条件

while(true){

// 查询一批数据处理

// 满足条件 break

// 处理业务 更改账户 ,记录流水,更改一批状态

}

思路一 存在的问题:

可能会死锁:

模拟:更改账户 一般都会使用乐观锁 ,改成功 就记录 流水 更改一批数据的状态。

        假如刚好 并发操作账户 (就会有一批数据没有处理),那么由于 mysql 5.6 以后隔离级别是可重复 读,所以就会 一直查询到那批数据未处理,而账户表又是 乐观锁 ,由于可重复读 导致版本号 一直读的不是最新的。所以就卡在这里了,很好模拟出来。

思路二

for(i=1;i<=totalPage,i++){

// 一页页处理

//处理业务 更改账户 ,记录流水,更改一批状态

}

思路二存在问题

分页处理完成后 ,乐观锁操作账户 会出现一批数据未处理 。

分页只能当前页只能是第一页,不能是 i ,因为处理完成后 状态变化,分页数据就不对了 会跳过一些数据。

思路三

相对比较完美 解决 并发场景,且能保证所有数据全部处理一边,不会漏掉数据。

for(i=1;i<=totalPage,i++){

// 一页页处理

// 固定 当前页 为 1

//处理业务 更改账户 ,记录流水,更改一批状态 ,记录有没有发生并发操作。

}

// 循环完成后,判断是否发生了并发,因为并发 就会存在 数据未处理

// 存在并发 就在使用 可调度线程池 在调度 一下结算 逻辑

private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);


scheduledExecutorService.schedule(()->{
 log.info("重跑任务");
},20,TimeUnit.SECONDS);

写好程序 不简单,并发场景下 会出很多问题,处理的好,得加深 知识的理解。

相关文章

  • 从结算业务 深入理解 并发,mysql 乐观锁,可重复读

    从结算业务 深入理解 并发,mysql 乐观锁,可重复读 结算 一般就是 ,把一些未结算的订单 金额,周期性的 ...

  • 乐观锁和悲观锁

    参考来源 深入理解乐观锁与悲观锁 乐观锁的一种实现方式——CAS mysql乐观锁总结和实践 乐观锁和悲观锁 悲观...

  • 2019-03-18文章精选

    1.深入理解 MySQL ——锁、事务与并发控制 各种锁、事务与并发,写得很详细。 2.剖析分布式锁 redis部...

  • mysql事务

    深入理解Mysql——锁、事务与并发控制https://juejin.im/post/68449036778791...

  • MySQL数据库的锁机制

    在并发访问情况下,很有可能出现不可重复读等等读现象。为了更好的应对高并发,封锁、时间戳、乐观并发控制(乐观锁)、悲...

  • 今日份打卡 164/365

    技术文章跳槽知识点eureka执行流程分布式锁解决缓存重建并发问题MySQL实现可重复读的原理MySQL主从同步C...

  • MySQL悲观锁与乐观锁的实现方案

    我们知道Mysql并发事务会引起更新丢失问题,解决办法是锁,所以本文将对锁(乐观锁、悲观锁)进行分析 悲观锁和乐观...

  • 使用mysql悲观锁解决并发问题

    使用mysql悲观锁解决并发问题 最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲...

  • 你应该了解的MySQL锁分类

    MySQL中的锁 锁是为了解决并发环境下资源竞争的手段,其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发...

  • 浅谈MySQL的锁

    MySql的锁类别有乐观锁和悲观锁 乐观锁:    假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。悲...

网友评论

      本文标题:从结算业务 深入理解 并发,mysql 乐观锁,可重复读

      本文链接:https://www.haomeiwen.com/subject/ccpkartx.html