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鎖的簡單體驗:
傳送兩次請求執行以下程式碼
執行結果:
問題:假設伺服器掛了,我們的解鎖程式碼沒有執行,會不會出現死鎖
結果:不會。
原因:看門狗機制:1。redis對鎖有一個自動延期的機制(如果業務超長,自動給鎖續上新的30秒,不用擔心業務時間長,鎖自動過期刪除掉,預設加鎖都是30秒)
2。加鎖的業務只要執行完成,就不會給當前鎖續期,即使不手動解鎖,鎖預設在30秒後自動刪除
官方文件說明:
開啟redisTemplate檢視