转载: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 | 表数据更新时间 |
扣费之前,我们要先查询一下账户的余额是否足够抵扣,然后再做真正的减扣。
大致的过程如下:
- select balance from tb_