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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Redisson分布式鎖源碼之公平鎖釋放

Redisson 分布式鎖源碼之公平鎖釋放

作者: 程序員小航 2021-07-02 08:51:09

開發(fā)

前端

分布式

Redis 看門狗機(jī)制是在 RedissonBaseLock#scheduleExpirationRenewal 方法中,這塊公平鎖和非公平鎖并無區(qū)別。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供察哈爾右翼中旗網(wǎng)站建設(shè)、察哈爾右翼中旗做網(wǎng)站、察哈爾右翼中旗網(wǎng)站設(shè)計、察哈爾右翼中旗網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、察哈爾右翼中旗企業(yè)網(wǎng)站模板建站服務(wù),十余年察哈爾右翼中旗做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

[[408803]]

前言

看門狗機(jī)制是在 RedissonBaseLock#scheduleExpirationRenewal 方法中,這塊公平鎖和非公平鎖并無區(qū)別。

前文已經(jīng)了解到,公平鎖加鎖失敗之后,會將當(dāng)前放到等待隊列中,通過 Java 代碼中的循環(huán)不斷嘗試獲得鎖。

1.鎖釋放

主動釋放

源碼:RedissonFairLock#unlockInnerAsync

  • KEYS[1]:加鎖的名字,anyLock;
  • KEYS[2]:加鎖等待隊列,redisson_lock_queue:{anyLock};
  • KEYS[3]:等待隊列中線程鎖時間的 set 集合,redisson_lock_timeout:{anyLock},是按照鎖的時間戳存放到集合中的;
  • KEYS[4]:redisson_lock__channel:{anyLock};
  • ARGV[1]:LockPubSub.UNLOCK_MESSAGE;
  • ARGV[2]:鎖超時時間 30000;
  • ARGV[3]:UUID:ThreadId 組合 58f6c4a2-9908-4957-b229-283a45359c4b:47;
  • ARGV[4]:currentTime 當(dāng)前時間戳。

這塊邏輯突出部分已經(jīng)標(biāo)出,重點(diǎn)就是釋放鎖。

  1. 鎖在隊列中,超時了則直接從隊列中移除;
  2. 鎖減少重入次數(shù),減少后,如果重入次數(shù)大于 0,重置超時時間,如果不大于 0,則直接移除鎖。

這樣的話后續(xù)就其他線程從等待隊列中開始獲得鎖。

超時刪除

在加鎖和釋放鎖的 lua 腳本中,第一段永遠(yuǎn)是一個 while true do xxx,作用就是用來移除隊列中超時的鎖。

而持鎖線程的釋放,則和非公平鎖沒有任何區(qū)別,當(dāng)鎖超時或者服務(wù)宕機(jī),鎖就會被自動釋放。(這個是指 anyLock)。

2.總結(jié)

公平鎖的釋放同樣分為主動釋放和超時釋放。

主動釋放,即自己調(diào)用釋放鎖。 

超時刪除,則分為兩種,一種是持鎖線程超時刪除,這種和非公平鎖沒有任何區(qū)別,因?yàn)檫@個鎖也是含有超時時間+看門狗續(xù)租的。另一種則是等待隊列中的超時刪除,是在每次獲取鎖之前,判斷第一個等待線程的時間戳是否超時,從而移除鎖。

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


網(wǎng)頁標(biāo)題:Redisson分布式鎖源碼之公平鎖釋放
當(dāng)前路徑:http://m.5511xx.com/article/codjdcd.html