秒杀是电商平台的一种品牌推广、促销的一个高并发短时间的一个活动。可以提高用户体验度和提高品牌知名度,
会在活动开始之前大力宣传,假如促销一百件商品,可能会吸引一万个用户同时在一个页面不断刷新,这里可以
用freemarker生成静态页,通过ajax动态获取必需的数据,等待活动时间开始,但是如果只在静态页进行对按钮的
限制,可能会出现有些用户修改电脑时间、前端js,导致出现提前抢购的情况。我们采用的解决方案是在后台也进,
从页面去进行抢购要快得多,我们通过定时器,在活动开始的时候生成一个随机字符串组成的密钥存入redis,在用
户刷新页面时,如果时间到了活动范围,会从redis中查出密钥放入隐藏域中并且开放按钮,在进入方法时,进行密
钥对比,如果密钥正确才能下单。在进行下单的时候,只有在支付成功后才算作真正的库存减少,可能两个人同时
下单,导致支付后的售出数量超过库存数量,出现货不够发的情况,为了避免这种情况,我们把库存数量分为可出
售库存数量以及锁定库存数量,我们在下单的时候会对库存进行锁定,因为库存是存在redis中的,在下单的时候会
用redis提供的incr方法和decr方法对可出售库存以及锁定库存数量的改查变成一步,防止执行到一半时与其他用户
发生冲突,(举例),在订单成功支付后,再对锁定库存数量进行减少,并且通过MQ去异步存储到mysql,防止高
并发mysql服务器压力太大,遇到退单的情况,对锁定库存数量进行减少,再对可出售数量进行增加。
原文地址:https://www.cnblogs.com/chihao666/p/10369062.html
时间: 2024-11-08 15:54:04