[求助]关于金额处理的问题?

一个很简单的功能 - 视频下载,逻辑是这样的。
1:user 表用户金额减少
2:money_records 表记录一下
3:videos 表 下载次数增加一次。

一般都是把这三次操作放到一个事务里面,有什么别的办法么?
可以将三次操作单独管理,又保证数据的一致性么?
想过用事件队列,但是又保证不了数据的一致性!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

没有吧,不在事务里怎么保证一致性,其他操作失败没法回滚之前的操作啊。 非要拆开的话,从业务角度分析,扣钱是主要逻辑,那么可以在用户扣款成功后做两个异步操作:1.下载+1,2.添加记录,只需要保证异步操作一定成功即可。下载数和消费记录一般来说对业务影响不大,不过还是得看你们的业务场景吧。

3年前 评论
qiyeal (楼主) 3年前
讨论数量: 6

没有吧,不在事务里怎么保证一致性,其他操作失败没法回滚之前的操作啊。 非要拆开的话,从业务角度分析,扣钱是主要逻辑,那么可以在用户扣款成功后做两个异步操作:1.下载+1,2.添加记录,只需要保证异步操作一定成功即可。下载数和消费记录一般来说对业务影响不大,不过还是得看你们的业务场景吧。

3年前 评论
qiyeal (楼主) 3年前

肯定是加事务啊

3年前 评论
qiyeal (楼主) 3年前

保证一致性的话,1,2步骤要写一个回滚的接口,如果2失败,就通过接口回滚1的操作。3失败,回滚2和1。

3年前 评论
游离不2

有事务就有锁的问题,而锁的问题大多是由并发引起,所以先解决并发问题,锁也就问题不大了。那并发的问题怎么解决呢,最简单的办法就是通过队列,将并行转串行。

3年前 评论

事务的四大特性ACID了解一下...

3年前 评论

”将三次操作单独管理“指的是编程上的吗?

3年前 评论
qiyeal (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!