日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redisson分布式鎖源碼之二:看門狗

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

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

前端
分布式
Redis 說起 Redisson,比較耳熟能詳?shù)木褪沁@個(gè)看門狗(watchdog)機(jī)制。本文就一起看看加鎖成功之后的看門狗(Watchdog)是如何實(shí)現(xiàn)的?

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

前言

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

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

1加鎖成功

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

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

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

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

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

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

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

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

Redisson 看門狗(Watchdog)在指定加鎖時(shí)間時(shí),是不會(huì)對(duì)鎖時(shí)間自動(dòng)續(xù)租的。

2看門狗

看門狗的一部分重點(diǎn)邏輯就在 renewExpiration 方法這里:

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

續(xù)租邏輯

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

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

3總結(jié)

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

只有在未指定鎖超時(shí)時(shí)間時(shí)才會(huì)使用看門狗;

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

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

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

 本文轉(zhuǎn)載自微信公眾號(hào)「程序員小航」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員小航公眾號(hào)。


文章標(biāo)題:Redisson分布式鎖源碼之二:看門狗
文章分享:http://www.dlmjj.cn/article/djcpgee.html