社区
Java EE
帖子详情
用户余额下单如何保证数据一致性
xyq1986
2019-02-04 09:39:47
mysql垂直分库:用户余额一个库,订单表一个库,资金明细一个库。 用户采用余额下单,余额后马上下单成功,怎么在大并发情况下保证不会被多下单(余额100却能下多单100元的)且数据一致。
...全文
1682
13
打赏
收藏
用户余额下单如何保证数据一致性
mysql垂直分库:用户余额一个库,订单表一个库,资金明细一个库。 用户采用余额下单,余额后马上下单成功,怎么在大并发情况下保证不会被多下单(余额100却能下多单100元的)且数据一致。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
别闹腰不好
2019-03-01
打赏
举报
回复
redis 分布式锁,setNX() 用户维度的分布式锁, mysql 也能实现分布式锁。
stacksoverflow
2019-02-28
打赏
举报
回复
2
tcc补偿型事务,预处理的时候冻结余额,下单成功后用冻结的记录把余额扣掉,把冻结记录清除,下单失败后把冻结记录清除。
哈希塞特
2019-02-28
打赏
举报
回复
看你想一致到什么程度,强一致就需要单独搭建一个事物协调服务,用两阶段三阶段提交,但是并发能力不高。 只要达到最终一致就可以用mq事物,用rocketmq有现成的接口可用,其他mq需要自己维护本地消息表,记录失败的事物,定期回滚补偿。 你说的是大并发,那就应该用mq事物。
angel6709
2019-02-15
打赏
举报
回复
为啥不让多下蛋
HHeyJ
2019-02-15
打赏
举报
回复
如果我没理解错的话,这种业务场景可以采用乐观锁
神界码农-D-艾斯
2019-02-14
打赏
举报
回复
分布式事物控制
开拓者Amadues
2019-02-13
打赏
举报
回复
引用 4 楼 bcsflilong 的回复:
我真不知道楼上在那说的是什么,你这种场景是分布式事务
楼主说了避免“余额100却能下多单100元的”,这个就是锁。
zxm213
2019-02-12
打赏
举报
回复
新人报到,谢谢各位老师
道不虚行只在人
2019-02-11
打赏
举报
回复
不可能分布式事务,性能太差,你要做的就是保证幂等,每笔交易都有一个流水号,流水号做唯一键
bcsflilong
2019-02-11
打赏
举报
回复
我真不知道楼上在那说的是什么,你这种场景是分布式事务
开拓者Amadues
2019-02-06
打赏
举报
回复
但如果你的金额扣费计算需要在应用层完成的,那就比较麻烦,我自己做的话只会手动在应用层加锁,也就是让每笔业务操作排队,但这样会降低不少性能。 还有我看到应用是多节点的时候,因为涉及到多台不同的服务器,只在本服务器排队还不够,要多台服务器一起考虑加锁,那样就更麻烦了。
开拓者Amadues
2019-02-06
打赏
举报
回复
你标题是事务性,但内容我看是跟锁有关的。 直接update 表 set 余额 = 余额 - xx就可以了,不管你前端有多少用户同时请求,数据库表这里总有一个先后的(数据库内部也有锁),更新完之后读一下,如果其中某一笔交易的费用大于余额就报错并回滚。
十八道胡同
2019-02-04
打赏
举报
回复
这个就是分布式事务的应用场景 分布式事务保障订单和余额一致性,要成功都成功,要失败都失败
RocketMQ (二)整合、应用
1. 案例介绍 1.1 业务分析 模拟电商网站购物场景中的【
下单
】和【支付】业务 ###1)
下单
用户
请求订单系统
下单
订单系统通过RPC调用订单服务
下单
订单服务调用优惠券服务,扣减优惠券 订单服务调用调用库存服务,校验并扣减库存 订单服务调用
用户
服务,扣减
用户
余额
订单服务完成确认订单 ###2)支付
用户
请求支付系统 支付系统调用第三方支付平台API进行发起支付流程
用户
通过第三方支付平台支付成功后,第三方支付平台回调通知支付系统 支付系统调用订单服务修改订单状态 支付系统调用积分服务添加
RocketMQ-02
1. 案例介绍 1.1 业务分析 模拟电商网站购物场景中的【
下单
】和【支付】业务 ###1)
下单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HO34Pfst-1636376285209)(img/
下单
组件图.png)]
用户
请求订单系统
下单
订单系统通过RPC调用订单服务
下单
订单服务调用优惠券服务,扣减优惠券 订单服务调用调用库存服务,校验并扣减库存 订单服务调用
用户
服务,扣减
用户
余额
订单服务完成确认订单 ###2)支付 [外链图片转存失败,源站可能有防盗链机制
账户
余额
并发扣款如何
保证数据
一致性
简介 很多业务系统中都离不开到
余额
系统,
余额
系统可以为客户提供一个虚拟账户,
用户
可以充值,然后使用账户中的
余额
购买平台内的商品,如果平台做的比较大后,也可以支持
用户
账户间的交易,如转账、收款等业务等等。 本文将系统性的梳理一下
余额
系统的整体设计,内容有 常见账户并发扣款设计对比
余额
系统核心业务梳理
余额
系统数据表结构设计 账户并发扣款业务流程梳理 原文:地址 1、常见账户并发扣...
MySQL是如何
保证数据
一致性
的?
通过上文《MySQL是如何
保证数据
不丢失的?可以了解DML的操作流程以及数据的持久化机制。对于一个数据库而言,除了数据的持久性、不丢失之外,
一致性
也是非常重要的,不然这个数据是没有任何意义的。在使用MySQL时,数据不一致的情况也可能出现,所以,本文就来看看MySQL是如何
保证数据
一致的。MySQL
一致性
的保证基本上涉及到InnoDB存储引擎的各个组件,「Buffer Pool」、「Log Buffer」、「Redo Log」、「Undo Log」等,还有DML操作的流程、锁、故障恢复等功能。
并发扣款,如何
保证数据
一致性
扣款的业务场景是怎样的?
用户
购买商品的过程中,要对
余额
进行查询与修改,大致的业务流程如下: 第一步,从数据库查询
用户
现有
余额
:SELECT money FROM t_yue WHERE uid=$uid; 不妨设查询出来的$old_money=100元。 第二步,业务层实施业务逻辑计算,比如: (1)先查询购买商品的价格,例如是80元; (2)再查询产品是否有活动,以及活动折扣,例如...
Java EE
67,535
社区成员
225,852
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章