<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 710字,需瀏覽 2分鐘

           ·

          2021-07-01 22:47

          前言

          前面已經了解到了,可重入鎖加鎖,看門狗以及鎖的互斥阻塞。

          當鎖加鎖成功之后,鎖是如何釋放的?

          1

          主動釋放

          源碼入口:RedissonLock#unlock

          在解鎖時會獲取當前線程的id。

          一路往里跟,直接來到 RedissonLock#unlockInnerAsync

          分析一下 lua 腳本的內容:

          1. 如果鎖不存在,直接返回 null;
          2. 如果鎖存在,則對鎖的重入次數(shù) -1;
            1. 剩余重入次數(shù)大于 0,重新設置過期時間,返回 0;
            2. 剩余重入次數(shù)不大于 0,刪除 redis key 并發(fā)布消息,返回 1;

          主動釋放鎖這塊考慮的不僅僅是對 key 進行處理,因為可能存在重入鎖,所以會先對 redis key 對應的 hash value 進行遞減,相當于減去重入次數(shù)。

          2

          自動釋放

          相比較主動釋放,自動釋放就比較容易理解了。

          1. 當服務宕機時,看門狗不再看門,那么最多 30s 之后鎖被自動釋放;
          2. 當設置鎖的時間時,鎖到了時間,自動釋放。

          3

          總結

          Redisson 鎖的釋放分為兩種:

          1. 主動釋放:自己調用 API unlock 即可;
          2. 宕機/到期自動釋放:Redis key 指定時間自動過期。


          - <End /> -




          歷史文章 | 相關推薦



          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品久久成人网 | 亚州欧美日韩在线观看视频 | 国产毛片一区二区三区 | 丁香婷婷综合久久 | 插综合网|