高并发扣款,如何保证结果一致性

在金融系统中,我们会跟钱打交道,而保证在高并发下场景下,对账户余额操作的一致性,是非常重要的,如果代码写的时候没考虑并发一致性,就会导致资损,本人在金融行业干了 8 年多,对这块稍微有点经验,所以这篇聊一下,如何在并发场景下,保证账户余额的一致性

1. 扣款流程是什么样的?

图片图片

public  void payout(long uid,var payAmount){
   1. 查询账户总额
   var  amount= "SELECT amount FROM account WHERE uid=$uid";
   1. 计算账户余额
   var balanceAmount = amount-payAmount;
   if(balanceAmount