mysql余额⾼并发_⾼并发下怎么做余额扣减?
余额操作在⼤多数系统都是不可缺少和不允许出现问题的 如何修改余额 , 这个问题可能在实际项⽬中 没那么简单;
如何修改余额
假设⼀个⽤户数据 :
id⇒12 | user_name⇒放放 | fee⇒ 30 | updated_at ⇒ 2019-09-06 15:51:33
mysql下载不了怎么办修改余额
//消费⾦额
$spend = 10;
//查询⽤户余额
$user = select id,fee from `users` where id = 12;
//计算⾦额
$newFee = $user['fee']-$spend;
//.. 这⾥检查余额是否⾜够
//更新余额
update `users` set fee = $newFee where id = 12 ;
按照正常逻辑来说上⾯更新余额是没问题的
但是如果发⽣并发 当 A 跟 B 同时发起请求时
请求A 查询出余额为 30
请求B 查询出余额为 30
请求B 更新余额为20
请求A 更新余额为20
最终⽤户余额为 20
也就是说 ⽤户余额为30 两个请求都消费了 10元 即 30 - 10 -10 =10 但是当发⽣并发请求时 余额最终为20 这⾥的⾦额是错误的在请求B 修改了 余额之后 请求A的查询出来的余额已经不是正确的了 导致了 余额更新错误
常见的解决办法 添加数据库的⾏锁
当请求A 执⾏时 先加⼊锁 阻塞 请求B直到 请求A完成之后 请求B 才继续执⾏
当然使⽤事务 并不是那么明智
//开始事务
begin;
//消费⾦额
$spend = 10;
//查询
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论