秒杀

day1 2020.8.6 21.27

压力测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

秒杀定义

  1. 在高并发的情况下,购买某个商品,从而下订单。

秒杀问题

  1. 超卖,一件商品卖给了多个人
  2. 保证用户体验

保护流程(要有先后顺序)

  1. 最核心基础问题:超卖
  2. 优化系统,提高吞吐量:令牌桶限流、Redis缓存、消息队列异步处理订单

超卖问题

1.概念

2. 业务场景

在这里插入图片描述
首先要接收来自用户的秒杀请求参数,然后将参数交给业务层,业务层拿到参数之后,首先去数据库中找相应商品的库存信息。若有库存,则减库存,然后为用户创建订单,如果没有库存,则拒绝用户请求。

3. 解决方案

第一种–悲观锁:

第一种方式:在方法中加上synchronized,相当于加上了悲观锁,拥有锁才可以更改资源(和@Transactional一起使用会有问题),所以要将synchronized放在控制器调用的地方。

缺点1:会让线程排队,一个一个执行。系统效率、用户体验
在这里插入图片描述
缺点2:JDK级别的锁仅在JVM进程下有效,控制不了集群架构或者分布式架构的资源增强问题。
在这里插入图片描述

需要了解的知识点:@事务、同步代码块、悲观锁、乐观锁

第二种–乐观锁:

在这里插入图片描述
当利用mysql分布式锁的时候,插入或者更新一个字段的时候,就自动加锁。如果不设置版本号,则其他的会在固定时间一直访问该资源,在这儿加上了版本号,当自己的版本号不一致的时候,自动拒绝这些请求,减少了资源的浪费。

第三种–Redis分布式锁

在这里插入图片描述

接口限流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redis缓存(设置过期时间)

在这里插入图片描述

消息队列

在这里插入图片描述
不丢失错误

加盐

在这里插入图片描述

分布式锁(在分布式的系统中加锁)

1. 什么情况需要加锁

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值