首页 > 其他 > 详细

秒杀设计

时间:2019-12-17 18:33:18      阅读:106      评论:0      收藏:0      [点我收藏+]

  ---- 个人设计,未经实践,欢迎指正。

 

场景
预估请求量:1kw,商品:gbjd,库存:50。

server数量:10。
server实现(queryCount + stock in redis)
1:限流
limit
初始为5-10,limit大时,尽量在有人取消时,第一次进来其他用户能秒杀到。

一次处理后,当库存减为0时,可将limit减为1,如果有人取消订单,再来的请求可进来处理。


queryCount
AtomicInteger/Semaphore,记录当前正在处理的请求量,当queryCount等于limit时,再来的请求直接拒绝。

2:库存
redis中记录stock = 50,当请求通过限流后,如果stock <= 0,则秒杀失败。
如果stock > 0,则执行decr stock,当返回值 >= 0 时,去myslq减库存。
update product set stock = stock - 1 where sku = ‘gbjd‘;
(因已通过redis decr,mysql不用再判断old stock)。
当返回值 < 0 时,执行incr stock还原库存,并返回秒杀失败。

3:取消订单
取消订单,redis中incr stock,mysql stock + 1。
通过限流的用户,通过redis decr stock后,下单去mysql减库存。

秒杀设计

原文:https://www.cnblogs.com/vsop/p/12055954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!