Redisson 分布式鎖源碼 04:可重入鎖釋放

前言
前面已經了解到了,可重入鎖加鎖,看門狗以及鎖的互斥阻塞。
當鎖加鎖成功之后,鎖是如何釋放的?
1
主動釋放
源碼入口:RedissonLock#unlock

在解鎖時會獲取當前線程的id。
一路往里跟,直接來到 RedissonLock#unlockInnerAsync:

分析一下 lua 腳本的內容:

如果鎖不存在,直接返回 null; 如果鎖存在,則對鎖的重入次數(shù) -1; 剩余重入次數(shù)大于 0,重新設置過期時間,返回 0; 剩余重入次數(shù)不大于 0,刪除 redis key 并發(fā)布消息,返回 1;
主動釋放鎖這塊考慮的不僅僅是對 key 進行處理,因為可能存在重入鎖,所以會先對 redis key 對應的 hash value 進行遞減,相當于減去重入次數(shù)。
2
自動釋放
相比較主動釋放,自動釋放就比較容易理解了。
當服務宕機時,看門狗不再看門,那么最多 30s 之后鎖被自動釋放; 當設置鎖的時間時,鎖到了時間,自動釋放。
3
總結

Redisson 鎖的釋放分為兩種:
主動釋放:自己調用 API unlock 即可; 宕機/到期自動釋放:Redis key 指定時間自動過期。
- <End /> -
歷史文章 | 相關推薦

評論
圖片
表情
