【簡說八股】Redisson的守護線程是怎么實現的

Redisson

Redisson 是一個 Java 語言實現的 Redis SDK 客戶端,在使用分布式鎖時,它就采用了「自動續期」的方案來避免鎖過期,這個守護線程我們一般也把它叫做「看門狗」線程。

Redission是一個在Java環境中使用的開源的分布式緩存和分布式鎖實現,基于Redis數據庫。在Redission中,守護線程并不是一個特定的概念,但是它提供了一些功能,可以通過后臺線程來實現類似于守護線程的行為。

  1. 后臺任務:Redission使用了一些后臺任務來維護鎖的狀態或者其他緩存數據的一致性。例如,Redission會定時檢查和更新鎖的信息,確保鎖在持有者釋放后能被正確清理。

  2. 鎖自動延期:當使用Redission的鎖時,可以設置一個看門狗(watchdog)機制,這是一個后臺線程,它會定期檢查并延長鎖的持有時間。如果在鎖自動釋放前,業務線程還在執行,看門狗會自動續期鎖,防止鎖因為業務執行時間過長而被意外釋放。

	// 獲取鎖對象
RLock lock = redisson.getLock("anyLock");
// 嘗試獲取鎖,并設置鎖的過期時間,同時開啟看門狗進行自動續期
lock.lock(10, TimeUnit.SECONDS);
  1. 事件監聽和清理:Redisson 允許設置事件監聽器,如鎖釋放事件。后臺線程監聽這些事件并進行相關清理工作,確保系統資源有效回收。

以下是實現守護線程行為的幾個關鍵點:

  • setDaemon方法
    Redisson 中沒有直接創建 Java 守護線程,但后臺任務類似守護線程,會在主線程結束后退出。
  • 資源清理
    當 JVM 關閉或最后一個非守護線程結束時,守護線程負責清理資源,如釋放所有鎖。
  • 異常處理
    異常"attempt to unlock lock, not locked by current thread by node id"通常表示嘗試釋放未被當前線程持有的鎖,需要在釋放鎖前檢查持有情況。

總結來說,Redission并沒有明確地創建Java守護線程,但是它通過后臺任務和看門狗機制,實現了守護線程類似的功能,來維護分布式鎖和緩存的一致性和可靠性。這些機制保證了即使在高并發和分布式環境下,資源也能被正確管理和清理。

看門狗線程

Redisson 在處理分布式鎖時采用了自動續期的機制,通常稱為「看門狗」線程。這個看門狗線程負責定期檢查并延長鎖的持有時間,以避免鎖在業務執行過程中過期而被釋放。通過看門狗線程的自動續期功能,Redisson 確保了分布式鎖在需要時能夠持續有效地保持鎖定狀態。

看門狗機制通常用于分布式系統中的鎖管理,特別是在使用分布式鎖時非常有用。它的主要作用是定期檢查并續期鎖的有效時間,以確保在業務處理時間較長或發生異常情況時,鎖能夠持續有效。

在分布式系統中,由于網絡延遲、節點故障等原因,鎖的持有時間可能會超出預期,為了避免因此導致鎖被意外釋放,就需要引入看門狗機制來對鎖進行定時續期。具體來說,看門狗機制的工作流程一般包括以下幾個步驟:

  1. 鎖持有者獲取鎖后,設置一個自動過期時間(TTL)。
  2. 看門狗定期檢查鎖的狀態,并在接近過期時自動續期鎖的持有時間。
  3. 如果鎖的持有者因為某種原因無法正常續期鎖,看門狗也會負責清理過期的鎖,以避免資源泄露。

在 Redisson 中,就采用了看門狗機制來實現分布式鎖的自動續期功能。這樣一來,在使用分布式鎖時,即使業務處理時間較長或發生異常情況,也能夠通過看門狗機制確保鎖的持續有效,從而提高系統的穩定性和可靠性。

在這里插入圖片描述

如想更加深入理解Redis分布式鎖,可以仔細看看這篇文章:一文講透 Redis 分布式鎖安全問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch-卷積神經網絡

卷積神經網絡 基本結構 首先解釋一下什么是卷積,這個卷積當然不是數學上的卷積,這里的卷積其實表示的是一個三維的權重,這么解釋起來可能不太理解,我們先看看卷積網絡的基本結構。 通過上面的圖我們清楚地了解到卷積網絡和一般網…

【Javascript】設計模式之發布訂閱模式

文章目錄 1、現實中的發布-訂閱模式2、DOM 事件3、簡單的發布-訂閱模式4、通用的發布-訂閱模式5、先發布再訂閱6、小結 發布—訂閱模式又叫觀察者模式,它定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于…

Mysql深入學習 基礎篇 Ss.02 詳解四類SQL語句

我親愛的對手,亦敵亦友,但我同樣希望你能成功,與我一起,站在人生的山頂上 ——24.3.1 一、DDL 數據定義語言 1.DDL —— 數據庫操作 查詢 查詢所有數據庫 show databases; 查詢當前數據庫 select database(); 創建 create databa…

【簡說八股】Nginx、GateWay、Ribbon有什么區別?

前言 在現代的微服務架構中,Nginx、Gateway 和 Ribbon 都是處理網絡請求和服務的組件,但它們各自扮演的角色和提供的功能有所不同。下面我將詳細解釋它們之間的區別: Nginx Nginx 是一個高性能的 HTTP 和反向代理服務器,它也可…

Golang Vs Java:為您的下一個項目選擇正確的工具

Java 首次出現在 1995 年,由 James Gosling 和 Sun Microsystems 的其他人開發的一種新編程語言。從那時起,Java 已成為世界上最受歡迎和廣泛使用的編程語言之一。Java 的主要特點包括其面向對象的設計、健壯性、平臺獨立性、自動內存管理以及廣泛的內置…

MSMFN

CDFI是彩色多普勒血流成像 輔助信息 作者未提供數據

Codeforces Round 930 (Div. 2)

substr時間復雜度O&#xff08;N&#xff09;&#xff0c;不能一遍遍找&#xff0c;會超時 #include<iostream> #include<algorithm> #include<vector> #include<map> using namespace std; const int N5e510; map<string,int>mp; vector<…

[C++]AVL樹怎么轉

AVL樹是啥 一提到AVL樹&#xff0c;腦子里不是旋了&#xff0c;就是懸了。 AVL樹之所以難&#xff0c;并不是因為結構難以理解&#xff0c;而是因為他的旋轉。 AVL樹定義 平衡因子&#xff1a;對于一顆二叉樹&#xff0c;某節點的左右子樹高度之差&#xff0c;就是該節點的…

5、云原生安全之falco的規則解讀(部分)(上)

文章目錄 1、自定義規則測試1.1、自定義檢測定時任務的規則2、自帶規則詳解部分2.1、意外的出站連接源(類似的還有入站連接)2.2、檢測目錄穿越攻擊2.3、rpm數據庫被修改2.4、數據庫派生新的進程2.5、特權容器啟動2.6、啟動容器掛載到敏感路徑2.7、匹配所有在pod內啟動、并連接…

音視頻數字化(數字與模擬-照相機)

目錄 1、模擬/數字 2、第一臺照相機 3、照相機原理 4、取景方式 5、底片 6、數碼相機 7、數碼相機指標 8、數碼相機分類 (1)單反相機 (2)單電相機 (3)無反相機

2024.03.02藍橋云課筆記

1.scanf與printf取消分隔符的限制方法 示例代碼&#xff1a; int main() { char s[10];scanf("%d[^\n]",s);printf("%s",s);return 0; } 運行&#xff1a; 輸入&#xff1a;Hello World 輸出&#xff1a;Hello World 注&#xff1a;其中[]中是一個正則…

(UE4升級UE5)Selected Level Actor節點升級到UE5

本問所用工具為&#xff1a;AssetDeveTool虛幻開發常用工具https://gf.bilibili.com/item/detail/1104960041 在UE4中 編輯器藍圖有個節點為 Get Selected Level Actors 但在UE5中&#xff0c;藍圖直接升級后&#xff0c;節點失效&#xff0c;如圖&#xff1a; 因為在UE5中&am…

Vue3中Vuex狀態管理庫學習筆記

1.什么是狀態管理 在開發中&#xff0c;我們會的應用程序需要處理各種各樣的數據&#xff0c;這些數據需要保存在我們應用程序的某個位置&#xff0c;對于這些數據的管理我們就稱之為狀態管理。 在之前我們如何管理自己的狀態呢&#xff1f; 在Vue開發中&#xff0c;我們使用…

大廠面試經驗:如何對加密后的數據進行模糊查詢操作

加密后的數據對模糊查詢不是很友好&#xff0c;本篇就針對加密數據模糊查詢這個問題來展開講一講實現的思路。 為了數據安全我們在開發過程中經常會對重要的數據進行加密存儲&#xff0c;常見的有&#xff1a;密碼、手機號、電話號碼、詳細地址、銀行卡號、信用卡驗證碼等信息…

YoloV5改進策略:主干網絡改進|MogaNet——高效的多階門控聚合網絡

文章目錄 摘要論文:《MogaNet——高效的多階門控聚合網絡》1、簡介2、相關工作2.1、視覺Transformers2.2、ViT時代的卷積網絡3、從多階博弈論交互的角度看表示瓶頸4、方法論4.1、MogaNet概述4.2、多階門控聚合4.3、通過通道聚合進行多階特征重新分配4.4、實現細節5、實驗5.1、…

Vue 3 中的 setup 函數是如何工作的?

Vue 3 中的 setup 函數是一個新的組件選項&#xff0c;用于使用組合式 API 定義組件的邏輯。這個函數的引入是為了解決 Vue 2 中隨著組件復雜度的增長&#xff0c;選項式的 API 可能導致代碼難以維護和理解的問題。通過 setup 函數&#xff0c;開發者可以更加靈活地組織和共享代…

Python光速入門 - Flask輕量級框架

FlASK是一個輕量級的WSGI Web應用程序框架&#xff0c;Flask的核心包括Werkzeug工具箱和Jinja2模板引擎&#xff0c;它沒有默認使用的數據庫或窗體驗證工具&#xff0c;這意味著用戶可以根據自己的需求選擇不同的數據庫和驗證工具。Flask的設計理念是保持核心簡單&#xff0c…

布隆過濾器實戰

一、背景 本篇文章以解決實際需求的問題的角度進行切入&#xff0c;探討了如果使用布隆過濾器快速丟棄無效請求&#xff0c;降低了系統的負載以及不必要的流量。 我們都知道布隆過濾器是以占用內存小&#xff0c;同時也能夠實現快速的過濾從而滿足我們的需求&#xff0c;本篇…

Matlab偏微分方程擬合 | 源碼分享 | 視頻教程

專欄導讀 作者簡介&#xff1a;工學博士&#xff0c;高級工程師&#xff0c;專注于工業軟件算法研究本文已收錄于專欄&#xff1a;《復雜函數擬合案例分享》本專欄旨在提供 1.以案例的形式講解各類復雜函數擬合的程序實現方法&#xff0c;并提供所有案例完整源碼&#xff1b;2.…

反編譯代碼格式處理

反編譯代碼格式處理 背景解決方案程序跑之后idea格式化 總結 背景 想看看公司里一個工具的代碼實現&#xff0c;手里只有一個jar包&#xff0c;只能通過jd-gui反編譯代碼。但是呢&#xff0c;源碼是有了&#xff0c;但是看的很難受。 解決方案 /*** 替換 {code searchDir}中…