SpringBoot+Redis+RabbitMQ实现简单的商品秒杀方案

秒杀存在的问题:

1、短时间内大量请求发送到服务器,很可能会造成服务器崩溃;

2、商品超卖;

3、服务器响应时间过久(频繁读写数据库,耗时长),用户体验性差。

解决思路:

image-20210220101945952

1、为解决频繁读数据库问题以及减轻数据库压力,使用 Redis ,项目初始化时先将商品信息缓存起来,请求过来时先查Redis,根据商品库存做进一步处理。

2、使用 Redis 解决超卖问题;

3、使用RabbitMQ 实现 流量削峰 和 异步调用,即当我们从 Redis 中知道库存充足时即可给用户返回success,然后将请求以消息的形式存入队列,之后由消费者端进行 修改商品库存和生成订单操作;

具体的实现我就不在这里赘述了!!

项目的测试结果:

1秒发100次请求:

image-20210220131322997

image-20210220133253748

分析:

平均响应时间:42ms

QPS:91.1/sec 平均每秒可处理91次请求

疑问之处: 当1m 请求140次或200次时,QPS 就变得很低。

image-20210220133912829

思考:

1、这样的架构能很大程度提升系统处理高并发请求的能力,与此同时系统架构也会更复杂。

2、虽然 RabbitMQ 能很好的解决系统高耦合问题,但如果 RabbitMQ 挂掉也会让系统崩掉。这时可以考虑一下 RabbitMQ 集群。

3、对 Redis 的数据频繁写会影响Redis的查询性能。

 

我个人代码:https://github.com/LvDonglin/GoodsSecKill/tree/master

https://download.csdn.net/download/rexueqingchun/12087061?utm_medium=distribute.pc_relevant_t0.none-task-download-OPENSEARCH-1.control&dist_request_id=24ae2e96-c0d6-42c7-bbb7-bf9074795d7e&depth_1-utm_source=distribute.pc_relevant_t0.none-task-download-OPENSEARCH-1.control

参考项目:https://gitee.com/gitee__wsq/seckill

 

posted @ 2021-02-25 09:30  YoungDeng  阅读(933)  评论(0编辑  收藏  举报