目錄
1. 使用 Redis 實現(xiàn)分布式鎖存在的問題
2. Redisson 的分布式鎖解決不可重入問題的原理文章來源:http://www.zghlxwxcb.cn/news/detail-824120.html
1. 使用 Redis 實現(xiàn)分布式鎖存在的問題
- 不可重入:同一個線程無法兩次 / 多次獲取鎖
- 舉例
- method1 執(zhí)行需要獲取鎖
- method2 執(zhí)行也需要(同一把)鎖
- 如果 method1 中調(diào)用了 method2,就會出現(xiàn)死鎖的情況
- method1 執(zhí)行的過程是同一個線程,但是鎖無法識別,則無法重入
2. Redisson 的分布式鎖解決不可重入問題的原理
- 原理
- 判斷是否可重入:記錄占有鎖的當前線程和想要獲取鎖的線程是否是同一個線程,如果是則獲取鎖成功
- 獲取鎖
- 判斷鎖是否是自己的
- 在 hash 的 value 中記錄鎖總共被(同一線程)獲取的次數(shù),獲取一次,value + 1,且要重置鎖的有效期,給重入的方法執(zhí)行預留充足時間
- 釋放鎖:判斷鎖的重入次數(shù)(即 value)是否為 0
- 如果為 0,說明重入鎖的層數(shù)到了最外層(method1),可以執(zhí)行釋放鎖的邏輯
- 如果 value > 0,說明還沒有到最外層(還在執(zhí)行 method2),則不能釋放鎖,而是將 value - 1,表示跳到外面一層,且需要重置鎖的有效期
- 核心思想:利用 Redis 中的 hash 結(jié)構(gòu),記錄獲取鎖的線程和重入次數(shù)
文章來源地址http://www.zghlxwxcb.cn/news/detail-824120.html
- 獲取鎖和釋放鎖的原子性:Lua 腳本
到了這里,關于Redisson 分布式鎖可重入的原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!