秒杀库存的简单控制

场景,秒杀活动,有商品A, 100个,价格0.01元,每人只能购买一个,在中午12:00开放购买,价格实惠,肯定好多人抢着购买。

这样就涉及到并发,就是说查出库存后到更新库存的过程,会存在其它请求修改库存的情况。

解决方法是在更新库存的时候,加个条件库存>0,如果执行sql返回影响的行数是0,就执行回滚,提示已售完。

sql如 update store_table set store_num = store_num - 1 where good_id = 111 and store_num > 0。

这里还有个要控制,一个人只能购买一个,可以加一个表,字段有user_id和good_id,设为唯一索引,在处理时判断是否存在,存在就回滚,但判断后另一个请求又有可能插入,那么本次插入就会报错了,虽然不太友好,便起到控制效果。

(非原创)
1. 尽量将请求拦截在系统上游:
2. 读多写少,多使用缓存

• 浏览器和app:做限速,限制用户在X秒之内只能提交一次请求(比如虽然你在疯狂的摇微信,但其实x秒后才向后端发起一次请求)
• 站点层:按照uid做限速,做页面缓存,这时用uid,一个uid5秒只准透过一个请求。这样就能拦住99%的for循环请求。
• 服务层:按照业务做写请求队列控制流量(每个提供服务的服务器各一个队列)(每次只透有限的写请求去数据层,如下订单,做支付这样的写业务)。3k张火车票,只透3k个下单去db
• 数据层:这时已经没有多少压力了。全部透到数据库,100w个下单,0个成功,请求有效率是0%;透3k个请求到数据,全部成功,请求有效率100%

3万个商品高并发下秒杀有什么方案实现超卖、少卖

原文地址:https://www.cnblogs.com/jimzbom/p/7610039.html