多并发时支付如何保持账户余额的一致性?

在高并发的支付场景下,如何确保账户余额在扣费操作中保持一致性是个挑战。传统Java开发中可能会使用synchronized关键字,但在多节点集群环境中无效。解决方案包括在查询和更新余额时采用原子操作,确保事务的完整性。可以利用存储过程将查询和更新整合,以防止账户余额出现负数。这种策略适用于充值、扣费、提现和转账等业务操作。
摘要由CSDN通过智能技术生成

转载:http://costlend.com/2016/03/14/dispatch-pay-balance-keep-consistence/


不管是电商,还是O2O业务都会涉及到支付,而且多速情况下流量比较大,尤其是在做活动的时候。一般支付系统主要有充值,扣费,提现,转账等功能,那么在有些业务场景下,尤其是多并发的情况下,我们在做扣费业务操作时该怎样去保持账户余额的一致呢?

Java开发人员可能第一个想法就是在调用扣减的DAO的方法上加上一个synchronized关键字,这个解决办法在单节点应用部署是也许能生效管用,但是在我们实际的应用场景中,一般都是集群,多节点部署的应用,这个时候该如何解决呢?

我们有一张账户表tb_account

field type desc
uid bigint 用户id
balance decimal 余额
update_time datetime 表数据更新时间

扣费之前,我们要先查询一下账户的余额是否足够抵扣,然后再做真正的减扣。
大致的过程如下:

  1. select balance from tb_
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值