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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

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

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

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

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

肯定是加事务啊

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

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

4年前 评论
游离不2

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

4年前 评论

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

4年前 评论

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

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