日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Redisson分布式鎖源碼之二:看門狗

Redisson 分布式鎖源碼之二:看門狗

作者:程序員小航 2021-06-28 10:51:55

前端
分布式
Redis 說起 Redisson,比較耳熟能詳的就是這個看門狗(watchdog)機制。本文就一起看看加鎖成功之后的看門狗(Watchdog)是如何實現的?

創(chuàng)新互聯專注于美蘭網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供美蘭營銷型網站建設,美蘭網站制作、美蘭網頁設計、美蘭網站官網定制、微信小程序服務,打造美蘭網絡公司原創(chuàng)品牌,更為您提供美蘭網站排名全網營銷落地服務。

前言

說起 Redisson,比較耳熟能詳的就是這個看門狗(Watchdog)機制。

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

1加鎖成功

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

回顧一下這個方法的入參:

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

其中的 tryLockInnerAsync 在之前已經介紹過了。

當加鎖成功時,會返回 null,加鎖失敗,會返回當前鎖的剩余時間。

所以這塊會進入到紅框標記的部分。

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

至此可以得出一個結論:

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

2看門狗

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

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

續(xù)租邏輯

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

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

3總結

至此,看門狗介紹完畢,簡要總結一下內容。

只有在未指定鎖超時時間時才會使用看門狗;

看門狗默認續(xù)租時間是 10s 左右,internalLockLeaseTime / 3;

可以通過 Config 統(tǒng)一設置看門狗的時間,設置 lockWatchdogTimeout 參數即可。

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

 本文轉載自微信公眾號「程序員小航」,可以通過以下二維碼關注。轉載本文請聯系程序員小航公眾號。


本文名稱:Redisson分布式鎖源碼之二:看門狗
文章來源:http://m.5511xx.com/article/djcpgee.html