继续解答星球水友提问。
===
沈老师,我们有个业务,同一个用户在并发“查询,逻辑计算,扣款”的情况下,余额可能出现不一致,请问有什么优化方法么?
===
扣款的业务场景是怎样的?
用户购买商品的过程中,要对余额进行查询与修改,大致的业务流程如下:
第一步,从数据库查询用户现有余额:
SELECT money FROM t_yue WHERE uid=$uid;
不妨设查询出来的$old_money=100元。
第二步,业务层实施业务逻辑计算,比如:
(1)先查询购买商品的价格,例如是80元;
(2)再查询产品是否有活动,以及活动折扣,例如是9折;
(3)比对余额是否足够,足够时才往下走;
if($old_money> 80*0.9){
$new_money=$old_money-80*0.9=28
} else {
return "Not enough minerals";
}
第三步,将数据库中的余额进行修改。
UPDATE t_yue SET money=$new_money WHERE