單體項目springboot快速搭建完畢,控制層代碼
浏覽器通路後單線程通路沒有問題
多線程通路代碼改造如下
部署兩個節點,springboot下修改端口,啟動兩個服務
配置nginx
jmeter模拟200并發請求,jvm 同步鎖會出現bug.重複賣的問題
redis鎖實作分布式鎖
類似lua腳本,下面那句代碼原子性的實作上兩句代碼的功能,保持每個請求的時間一緻的話問題不大,如果并發請求每個執行時間有差異,會導緻鎖永久失效,比如第一個請求執行到一半鎖時間過期了,第二個請求就可以進來拿到鎖,那麼第一個請求最後釋放的就是第二個請求的鎖,依次類推那麼就會導緻鎖永久失效
進一步優化:鎖的值為每個請求進來生成的一個UUID,鎖釋放之前進行判斷是不是自己加的鎖的值
現在問題是每個請求的時間和鎖的過期時間怎麼把握。
redisson分布式鎖架構,
引入依賴
實作原理
代碼
lua腳本