天天看點

redis分布式鎖實作高并發簡單例子

單體項目springboot快速搭建完畢,控制層代碼

redis分布式鎖實作高并發簡單例子

 浏覽器通路後單線程通路沒有問題

多線程通路代碼改造如下

redis分布式鎖實作高并發簡單例子

 部署兩個節點,springboot下修改端口,啟動兩個服務

配置nginx

redis分布式鎖實作高并發簡單例子

 jmeter模拟200并發請求,jvm 同步鎖會出現bug.重複賣的問題

redis鎖實作分布式鎖

redis分布式鎖實作高并發簡單例子
redis分布式鎖實作高并發簡單例子
redis分布式鎖實作高并發簡單例子

類似lua腳本,下面那句代碼原子性的實作上兩句代碼的功能,保持每個請求的時間一緻的話問題不大,如果并發請求每個執行時間有差異,會導緻鎖永久失效,比如第一個請求執行到一半鎖時間過期了,第二個請求就可以進來拿到鎖,那麼第一個請求最後釋放的就是第二個請求的鎖,依次類推那麼就會導緻鎖永久失效

redis分布式鎖實作高并發簡單例子

 進一步優化:鎖的值為每個請求進來生成的一個UUID,鎖釋放之前進行判斷是不是自己加的鎖的值

redis分布式鎖實作高并發簡單例子

現在問題是每個請求的時間和鎖的過期時間怎麼把握。

redisson分布式鎖架構,

引入依賴

redis分布式鎖實作高并發簡單例子
redis分布式鎖實作高并發簡單例子

實作原理

redis分布式鎖實作高并發簡單例子

 代碼

redis分布式鎖實作高并發簡單例子

lua腳本

redis分布式鎖實作高并發簡單例子
redis分布式鎖實作高并發簡單例子

繼續閱讀