<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 分布式鎖源碼 02:看門狗

          共 1126字,需瀏覽 3分鐘

           ·

          2021-07-01 22:48

          前言

          說起 Redisson,比較耳熟能詳?shù)木褪沁@個看門狗(Watchdog)機制。

          本文就一起看看加鎖成功之后的看門狗(Watchdog)是如何實現(xiàn)的?

          1

          加鎖成功

          在前一篇文章中介紹了可重入鎖加鎖的邏輯,其中 RedissonLock#tryAcquireAsync 方法是進行異步加鎖的邏輯。

          回顧一下這個方法的入?yún)ⅲ?/p>

          1. waitTime:-1;
          2. leaseTime:-1,加鎖時未指定鎖時間,則為 -1,如果指定,則是指定的時間;
          3. unit:null;
          4. threadId:當(dāng)前線程 id。

          其中的 tryLockInnerAsync 在之前已經(jīng)介紹過了。

          當(dāng)加鎖成功時,會返回 null,加鎖失敗,會返回當(dāng)前鎖的剩余時間。

          所以這塊會進入到紅框標(biāo)記的部分。

          leaseTime 為加鎖時間,默認(rèn)不指定,所以會進入到 scheduleExpirationRenewal 方法,也就是今天的主題:看門狗。

          至此可以得出一個結(jié)論:

          Redisson 看門狗(Watchdog)在指定加鎖時間時,是不會對鎖時間自動續(xù)租的。

          2

          看門狗

          看門狗的一部分重點邏輯就在 renewExpiration 方法這里:

          1. 延遲調(diào)度,延遲時間為:internalLockLeaseTime / 3,就是 10s 左右后會調(diào)度這個 TimerTask;
          2. 異步續(xù)租:邏輯都在 renewExpirationAsync 里面;
          3. 遞歸調(diào)用:當(dāng)續(xù)租成功之后,重新調(diào)用 renewExpiration 自己,從而達到持續(xù)續(xù)租的目的;
          4. 當(dāng)然也不能一直無限續(xù)租,所以中間有一些判斷邏輯,就是用來中斷續(xù)租的。

          續(xù)租邏輯

          這塊也是一個 lua 腳本,就是將之前的 redis key 直接重新設(shè)置時間。

          這樣一通續(xù)租下來,就是在過了 10s 左右將鎖的時間重新設(shè)置為 30s

          3

          總結(jié)

          至此,看門狗介紹完畢,簡要總結(jié)一下內(nèi)容。

          1. 只有在未指定鎖超時時間時才會使用看門狗;
          2. 看門狗默認(rèn)續(xù)租時間是 10s 左右,internalLockLeaseTime / 3;
          3. 可以通過 Config 統(tǒng)一設(shè)置看門狗的時間,設(shè)置 lockWatchdogTimeout 參數(shù)即可。

          最后,同樣使用一張圖,進行下總結(jié):


          - <End /> -




          歷史文章 | 相關(guān)推薦



          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  一级国产欧美成人A片 | 欧美一级国产一级日韩一级 | 逼特逼视频网址大全免费观看 | 内射无码高清视频 | 久七精品在线 |