自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[407749]]

前言

說(shuō)起 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)介紹過(guò)了。

當(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)然也不能一直無(wú)限續(xù)租,所以中間有一些判斷邏輯,就是用來(lái)中斷續(xù)租的。

續(xù)租邏輯

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

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

3總結(jié)

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

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

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

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

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

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

 

責(zé)任編輯:武曉燕 來(lái)源: 程序員小航
相關(guān)推薦

2023-11-29 07:40:12

分布式

2025-01-06 07:00:00

看門狗RedissonRedis

2021-07-06 08:37:29

Redisson分布式

2021-06-30 14:56:12

Redisson分布式公平鎖

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2022-08-04 08:45:50

Redisson分布式鎖工具

2021-07-01 09:42:08

Redisson分布式

2021-07-07 07:09:49

Redisson分布式鎖源碼

2022-06-30 08:04:16

Redis分布式鎖Redisson

2021-06-27 21:24:55

RedissonJava數(shù)據(jù)

2021-07-09 06:48:31

ZooKeeperCurator源碼

2021-07-03 17:45:57

分布式Redisson MultiLock

2024-01-02 13:15:00

分布式鎖RedissonRedis

2023-08-27 22:13:59

Redisson分布式緩存

2021-07-16 07:57:34

ZooKeeperCurator源碼

2022-06-16 08:01:24

redis分布式鎖

2021-09-17 07:51:24

RedissonRedis分布式

2023-03-17 16:42:45

應(yīng)用開(kāi)發(fā)Ability

2023-09-04 08:12:16

分布式鎖Springboot

2020-10-23 13:02:02

勒索軟件看門狗網(wǎng)絡(luò)犯罪
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)