秒杀的逻辑实现

秒杀模块:

秒杀特性

就比如12306 抢票—>秒杀行为
1.2 秒杀通用
并发流量:QPS(每秒的查询请求数量)
库存的命中率低

静态:商品信息
动态数据:库存+时间

1.3 数据库设计

秒杀商品和普通商品是分离的
1.秒杀商品表
商品价格
秒杀价格
库存量
2.订单表
商品
用户
时间
3.订单详情表
订单中的商品的详情秒杀
4.商品表
商品信息
5.用户表
用户信息

业务逻辑:

// 1.验证购买上限
//2.查询数据库的信息,查看该商品是否存在
//3.进行秒杀时间的比较
//如果开始时间小于当前时间 说明活动还未开始
//如果结束时间小于当前时间 说明活动已经结束了
//为了防止用户重复下单 所以查询用户是否下过订单
//查看库存是否存在
//生成订单
//订单生成成功
//进行减库

秒杀的共性问题:

秒杀减库存
1、下单立减
用户下单成功,立即减库存
第一版 可以作为测试版

2、付款立减
付款成功,更改库存
可以预防恶意刷单

3、预减库存
基于Redis
下单–>更改Redis库存–>付款—>更改数据库的库存

秒杀的超卖

Java锁的实现
ReentrantLock、synchronized
Mysql排他锁 在修改库存的时候,加个验证 库存量>0
乐观锁

基于Version 。结合CAS的思想去实现 安全控制 基于Redis命令
Redis命令执行的时候,单线程的

秒杀接口的隐藏

为了安全起见,一般需要把秒杀杀接口,隐藏起来,防止外部 用户提前发现秒杀接口,进而进行违规操作 一定的加密规则 URL动态化

恶意下单

黑名单处理 限定购买的数量
用户+IP 进行限制 异常的请求 加入黑名单
差评师
舆情系统

限流

对于高并发的请求,一般都要求做限流
1.限流算法 1.令牌桶 2.漏桶
2.Api限流 第三方技术 3.软件
Tomcat/Nginx
可以设置大的并发连接数量和连接的等待时间

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值