关于非分布式事务和资金字段修改的并发问题记录

     1.在非分布式的接口级调用,如spring 的注解注入或者bean注入。他的事务是可以配置传播属性的。既,在同一项目下,如果A接口通过,B接口通过,C接口异常,在配置默认传播属性=REQUIRED。C接口异常会导致ABC均回滚。

       需要注意的是,因为是接口级的调用,每个想要回滚的接口都要配置事务,以及传播属性为REQUIRED

      2.关于资金修改的并发问题,三种方式,乐观锁,悲观锁,和变量累加。

         乐观锁比方说:置一个version,每次修改,在where中version = 原version,set 的version= version +1

         悲观锁则是:用forupdate 或者其他的方式进行锁表或者锁库,在修改的时候,不允许其他的代码更改。缺点是,不允许同时更改导致性能下降。

         变量累加:每次获取变化量,在mapper 语句中,采用 set amount=amount+变化量的方式。这种方式能够防止更改覆盖,因为每次都是 现金额+变化量,也就意味着,并发情况下,也没有关系。

 

        在同种业务类型修改,比如,某一账户退款接口,也可以在开头加一个分布式锁,既,其他的接口没有该锁,还是可以改某一账户的其他的金额字段,但是退款相关字段,或者该退款接口的多线程调用,能有效解决重复并发的问题,这里防止的不是金额,而是重复处理,浪费性能。

 

         特此记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值