高并发业务处理失败
问题描述:
大量客户于一个时间点集中发生购买请求,导致部分客户购买失败,且后台维护人员登录后台在这个时间段内登录/界面维护查询等操作失败。
猜测购买中悲观锁操作:
-- 悲观锁,prod_id 为prod_info 表主键, 如下: select * from prod_info where prod_id = 1 for update; update prod_info set buy_num= buy_num + 1 where prod_id = 1 ; commit;
修改方案
-- 欢乐锁,prod_id 为prod_info 表主键, 如下:
select buy_num_old from prod_info where prod_id = 1
-- 更新 buy_num 值,这里需要注意 where 条件 【 buy_num= buy_num_old 】, 代码校验更新失败做循环调用
update prod_info set buy_num= buy_num + 1 where prod_id = 1 and buy_num= buy_num_old ;
commit;
于22/07/14
浙公网安备 33010602011771号