項目名稱
秒殺項目
地址:https://github.com/steamyao/seckill
用途:爲了學習多線程併發的知識,模擬多線程秒殺環境
上手指南
開發環境
springboot 2.1
IDEA
maven 3.6
kafka 2.1
redis 3.0
zookeeper
jdk 8.0
mysql8.0(這個不重要,換一個mysql-connection的jar包就行)
你將學到
- 搭建springboot 2.1框架
- 整合redis、kafka
- 數據庫樂觀。悲觀鎖、
- 線程池及多線程相關的知識
- 整合 swagger 2.0
- redis與zookeeper 分佈式鎖的使用
安裝步驟
1.在 application.properties 修改服務端口、redis、zookeeper。kafka、mysql地址。\
2 在 lock 包中修改 redis、zookeeper 地址,這個包是分佈式鎖的,做成了Utils類。
項目展示
1.前端頁面展示
2.後臺頁面
3.數據庫
補充
- 在悲觀鎖一的實現中,由於加了事務,會出現死鎖與事務回退(不會超賣),不加會出現超賣,所有會報出 Deadlock found when trying to get lock; try restarting transaction 異常
- 數據庫樂觀鎖二 超賣嚴重,這個屬於樂觀鎖的問題。
- 秒殺時將成功的用戶加入隊列,然後用定時任務寫入數據庫。要經過一定的時間(10s),纔會將秒殺成功的用戶信息寫回數據庫。
- 最後一個秒殺,是通過 Jmeter 模擬多個線程來訪問,最高可以承受 100000 個線程,也不會出錯,基本功能實現了。
鳴謝
該項目參考了 小柒2012 的 springboot-seckill
感謝閱讀!