Java高并发秒杀之接口优化

接口优化
Redis预减库存减少数据库的访问
内存标记减少redis访问
请求先入队缓冲,异步下单,增强用户体验
RabbitMQ安装与Spring Boot集成
1、Redis预减库存减少数据库的访问
顾名思义,Redis预减库存减少数据库的访问的思想就是减少对数据库的访问。
(1)系统初始化时,将商品库存信息加载到redis中;
(2)服务端收到请求后,redis预减库存,如果库存不足,则直接进入下一步;
(3)服务端将请求入队,立即返回向客户端返回排队中的信息,提高用户体验;
(4)服务端请求出队,生成秒杀订单,减少库存;
(5)最后客户端轮询是否秒杀成功。
系统初始化,把商品库存数量加载到Redis

实现接口 InitializingBean

实现方法


服务端收到请求后,redis预减库存,如果库存不足,则直接进入下一步



请求出队,生成订单,减少库存



客户端轮询,是否秒杀成功

2、内存标记减少redis访问

在MiaoshaController定义一个HashMap<Long, Boolean>,在某一商品已经秒杀结束时,在HashMap中对该商品的库存进行标记,如果库存为0,则将该商品标记为已经秒杀结束。

然后在从redis中读取库存信息前做一次判断,如果该商品已经秒杀结束,则不用在访问redis中的库存信息。


3、请求先入队缓冲,异步下单,增强用户体验
服务器收到秒杀请求后,将请求放置在队列中,提高用户体验。然后秒杀请求出队,服务器生成秒杀订单,减少缓存中的库存。
具体过程:
如果秒杀商品库存尚有,则生成一条秒杀消息发送到消息队列中;
消息的消费者收到秒杀消息后,从数据库中读取用户是否已经完成秒杀,如果没有,则减库存,下订单,写入订单信息到数据库中。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。