o(* ̄︶ ̄*)o

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理

高并发业务处理失败

问题描述:

  大量客户于一个时间点集中发生购买请求,导致部分客户购买失败,且后台维护人员登录后台在这个时间段内登录/界面维护查询等操作失败。

 

猜测购买中悲观锁操作:

  

--    悲观锁,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

posted on 2022-07-17 09:04  熊本熊の熊  阅读(38)  评论(0)    收藏  举报