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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM