秒杀系统的思路

①添加一个事务,通过事务来进行表的锁止,更新完库存后再释放锁。(在一般请求量不是特别巨大的都可使用)

②新增表数据一个标识字段,通过此数据变动来进行。(或者直接取用已售字段值进行校验)

  1. 首先用户进入秒杀接口,最先执行查库存方法。如果库存量和已售量相等则直接结束,否则执行下一步,接着进行对查询的库存量返回的库存信息进行直接条件更新,即此时在此条库存数据的条件字段进行数据更新。用于下一步用户携带此变动记录进行比对。
  2. 首先判断标识是否是我们查询库存时候的标识,如果是,直接扣减库存和改动标识内容,成功抢购,并在订单表创建一个订单。如果发现标识变了,则不更新数据库,直接返回抢购失败

③接口限流:令牌桶限流算法(限制瞬时大量请求访问)

        使用Guava的RateLimiter实现令牌桶限流接口。参考实现的具体

④抢购接口隐藏(接口加盐,防止脚本刷接口)

  1. 每次点击秒杀按钮,先从服务器获取一个秒杀验证值(接口内判断是否到秒杀时间)。再此阶段可对用户的个人信息和商品信息进行合法性校验,也可以对当前时间和秒杀时间也进行校验。

  2. Redis以缓存用户ID,商品ID,标识符和盐为Key,自定义唯一Value作为缓存验证值。

  3. 用户请求秒杀商品的时候,要带上秒杀value验证值进行校验。用户多次点击更新对应redis的校验值。为防止用户恶意请求获取验证值的接口,可同时设置用户请求时redis新增请求次数,在达到阈值之后直接返回频繁操作提示。

⑤单用户限制频率(限制某个用户频繁请求)

  1. 真实ip地址限制(不建议使用,存在当前同一ip下多个正常用户使用会受影响)
  2. 前端对在设定秒数内多次点击进行拦截不发送请求。
  3. 后端有两种思路的限频,第一种是用户请求在redis新增一个当前用户请求下单接口的记录,并给该记录设置一个过期时间。第二种同样是在redis新增一条记录,但是该记录记录的值为用户访问的次数,每调用一次进行加一 ,在到达阈值之后进行限制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值