分散式鎖-redisson-lock鎖測試

1.可重入鎖

文件:https://github.com/redisson/redisson/wiki/8.-%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E5%92%8C%E5%90%8C%E6%AD%A5%E5%99%A8

對可重入鎖的理解:

假如,有個方法A呼叫了一個方法B,假如A、B兩個都需要加鎖L1,此時A方法已經拿到鎖L1了,B就可以直接拿去用。

對不可重入鎖的理解:

假如,有個方法A呼叫了一個方法B,假如A、B兩個都需要加鎖L1,此時A方法已經拿到鎖L1了,B需要等待A釋放鎖,才可以執行。那麼這樣子可能會出現死鎖的狀態,因為A需要等待B執行完才釋放鎖(A呼叫了B)。

所以

:最好將鎖設定成可重入鎖,避免死鎖的問題。

如何使用juc(java.util.concurrent.*)本地鎖,就怎麼使用redisson分散式鎖

redisson鎖的簡單體驗:

傳送兩次請求執行以下程式碼

分散式鎖-redisson-lock鎖測試

執行結果:

分散式鎖-redisson-lock鎖測試

問題:假設伺服器掛了,我們的解鎖程式碼沒有執行,會不會出現死鎖

結果:不會。

原因:看門狗機制:1。redis對鎖有一個自動延期的機制(如果業務超長,自動給鎖續上新的30秒,不用擔心業務時間長,鎖自動過期刪除掉,預設加鎖都是30秒)

2。加鎖的業務只要執行完成,就不會給當前鎖續期,即使不手動解鎖,鎖預設在30秒後自動刪除

官方文件說明:

分散式鎖-redisson-lock鎖測試

開啟redisTemplate檢視

分散式鎖-redisson-lock鎖測試