前置知识
要写秒杀业务首先要了解一些概念和技术
-
qps
-
guava限流
-
mq
QPS每秒查询率(Query Per Second)
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。 (看来是类似于TPS,只是应用于特定场景的吞吐量)
Guava-RateLimiter类实现限流
http://ifeve.com/guava-ratelimiter/
RabbitMq
https://blog.csdn.net/qq_28165595/article/details/90546986
秒杀业务
- 首先尝试获取令牌 如果获取失败那么返回错误信息
- 访问内存map 查看当前商品是否已经秒杀完成 减少redis访问
- 在redis层面做库存预减
- 如果预减后的库存小于0 那么有两种可能 一是redis信息还没有初始化 二是商品库存不足
- 调用初始化方法 如果初始化后的数据还是小于0那么说明是商品库存不足
- 商品库存不足就将商品秒杀完毕的信息放入map中然后返回
- 预减成功后判断当前用户是否秒杀过当前商品
- 如果当前用户没有重复秒杀,那么将请求信息放入mq中
- 处理请求 保证这三个操作,减库存 下订单 写入秒杀订单是一个事物