赞
踩
问题记录:redisson分布式锁和@Transactional在并发场景中的Bug
详细描述:线程A抢占到线程B未提交事务但已释放的锁的,以及线程A读取到未提交的数据,导致线程A处理用户流水明细记录时,出现流水账目错误。
业务场景:房间内用户可以相互打赏礼物,在高频刷礼物的场景下,导致用户余额扣增错误
解决方法:
1、通过生产环境的日志进行原因分析
2、猜测可能出现的错误原因
3、模拟生产环境的业务代码,进行场景还原
4、确定问题是因为抢到锁之后,读取到了未提交的事务数据,问题进行修改
原业务逻辑伪代码:
- @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
- public Action consume() {
-
- //xxxx逻辑处理
- Business giftShareAmountMessage = new Business();
- serviceA.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。