Redisson分布式鎖原理

Redisson是基于Redis實現的客戶端庫,提供了多種Java并發API映射到Redis中,也實現了各種分布式服務,其中就有各種分布式鎖的實現。

Redisson鎖彌補了SETNX鎖的的局限性,實現了可重入、可重試和超時續約的功能。

  • 可重入:利用redis的 hash 結構記錄線程 id 和重入次數。每次獲取鎖時,先判斷鎖是否存在,如果不存在,則直接獲取,如果已經存在,且線程標識為當前線程,則可以再次獲取,并將重入次數加 1。釋放鎖時,每釋放一次,重入次數減 1,直至重入次數減為 0,則證明所有的業務已經執行結束,則可以直接釋放鎖。整個過程是采用lua腳本實現的。

  • 可重試:利用信號量和 PubSub 功能實現等待、喚醒,獲取鎖失敗的重試機制。在第一次嘗試獲取鎖失敗后,并不是立即失敗,而是去等待釋放鎖的信號(利用了 Redis 中 PubSub 機制)。而獲取鎖成功的線程在釋放鎖的時候,就會向等待中的線程發送一條消息,等待中的線程捕獲到消息后,就可以重新嘗試獲取鎖。如果重試失敗,則會繼續等待釋放鎖的信號,然后再去重試。當然,重試并不是無限次的,會有一個等待時間,如果超過等待時間,就結束重試。

  • 超時續約:利用 watchDog,每隔一段時間(releaseTime/3),重置超時時間。簡單來說,就是在獲取鎖成功后,會開啟一個定時任務,該定時任務每隔一段時間就會重置鎖的超時時間,這樣鎖的超時時間就會重新計時。

參考1
參考2

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

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

相關文章

解決NVM 下載node.js慢問題->最新鏡像

一、NVM 介紹 nvm是node版本管理工具,可以運行在多種操作系統上。這里主要記錄一下在windows系統的安裝和使用。 在使用過程中,下載其他版本時會出現下載慢或卡住或下載失敗的情況,是因為服務器在國外,網絡原因導致,…

代碼隨想錄Day 41|Leetcode|Python|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每個…

在統計上城鄉是如何劃分的

城鄉二元結構,是長期以來我國經濟社會發展的顯著特點之一,黨和政府高度重視統籌城鄉發展,縮小城鄉差距。為了對城鄉發展予以準確反映和動態監測,提高在統計上劃分城鄉工作的一致性,國家統計局開展了統一的統計用區劃代…

【Docker學習】docker run的端口映射-p和-P選項

docker run的端口映射選項分為-p(小寫,全稱--publish),-P(大寫,全稱--publish-all),之前認為只有改變容器發布給宿主機的默認端口號才會進行-p的設置,而不改變默認端口號…

面試經典算法系列之數組/字符串6 -- 輪轉數組

面試經典算法題38-輪轉數組 LeetCode.189 公眾號:阿Q技術站 問題描述 給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 …

YOLOv8訓練流程-原理解析[目標檢測理論篇]

關于YOLOv8的主干網絡在YOLOv8網絡結構介紹-CSDN博客介紹了,為了更好地學習本章內容,建議先去看預測流程的原理分析YOLOv8原理解析[目標檢測理論篇]-CSDN博客,再次把YOLOv8網絡結構圖放在這里,方便隨時查看。 ? 1.前言 YOLOv8訓練…

Map中KEY去除下劃線并首字母轉換為大寫工具類

在運維舊項目時候&#xff0c;碰上sql查詢結果只能返回List<Map>&#xff0c;key為表單字段名&#xff0c;value為獲取到的結果數據。 懶得一個一個敲出來&#xff0c;就直接寫個方法轉換&#xff0c;并賦值到相應實體對象里去。 Map中KEY去除下劃線并首字母轉換為大寫&…

算法提高之矩陣距離

算法提高之矩陣距離 核心思想&#xff1a;多源bfs 從多個源頭做bfs&#xff0c;求距離 先把所有1的坐標存入隊列 再把所有1連接的位置存入 一層一層求 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1…

Kafka 面試題(八)

1. Kafka&#xff1a;硬件配置選擇和調優的建議 &#xff1f; Kafka的硬件配置選擇和調優是確保Kafka集群高效穩定運行的關鍵環節。以下是一些建議&#xff1a; 硬件配置選擇&#xff1a; 內存&#xff08;RAM&#xff09;&#xff1a;建議至少使用32GB內存的服務器。為Kafk…

Web3Tools - 助記詞生成

Web3Tools - 助記詞生成工具 本文介紹了一個簡單的助記詞生成工具&#xff0c;使用 React 和 Material-UI 構建。用戶可以選擇助記詞的語言和長度&#xff0c;然后生成隨機的助記詞并顯示在頁面上 功能介紹 選擇語言和長度&#xff1a; 用戶可以在下拉菜單中選擇助記詞的語言&…

uniapp 圖片添加水印代碼封裝(優化版、圖片上傳壓縮、生成文字根據頁面自適應比例、增加文字背景色

uniapp 圖片添加水印代碼封裝(優化版、圖片上傳壓縮、生成文字根據頁面自適應比例、增加文字背景色 多張照片上傳封裝 <template><view class"image-picker"><uni-file-picker v-model"imageValue" :auto-upload"false" :title…

關于服務端接口知識的匯總

大家好&#xff0c;今天給大家分享一下之前整理的關于接口知識的匯總&#xff0c;對于測試人員來說&#xff0c;深入了解接口知識能帶來諸多顯著的好處。 一、為什么要了解接口知識&#xff1f; 接口是系統不同模塊之間交互的關鍵通道。只有充分掌握接口知識&#xff0c;才能…

http-server實現本地服務器

要實現一個本地服務器&#xff0c;你可以使用Node.js的http-server模塊。首先&#xff0c;確保你已經安裝了Node.js和npm。然后&#xff0c;按照以下步驟操作&#xff1a; 打開終端或命令提示符&#xff0c;進入你想要作為服務器根目錄的文件夾&#xff1b;運行以下命令安裝ht…

Axure PR 10 制作頂部下拉三級菜單和側邊三級菜單教程和源碼

在線預覽地址&#xff1a;Untitled Document 2.側邊三級下拉菜單 在線預覽地址&#xff1a;Untitled Document 文件包和教程下載地址&#xff1a;https://pan.quark.cn/s/77e55945bfa4 程序員必備資源網站&#xff1a;天夢星服務平臺 (tmxkj.top)

Linux x86_64 dump_stack()函數基于FP棧回溯

文章目錄 前言一、dump_stack函數使用二、dump_stack函數源碼解析2.1 show_stack2.2 show_stack_log_lvl2.3 show_trace_log_lvl2.4 dump_trace2.5 print_context_stack 參考資料 前言 Linux x86_64 centos7 Linux&#xff1a;3.10.0 一、dump_stack函數使用 dump_stack函數…

Unity開發中導彈路徑散射的原理與實現

Unity開發中導彈路徑散射的原理與實現 前言邏輯原理代碼實現導彈自身腳本外部控制腳本 應用效果結語 前言 前面我們學習了導彈的追蹤的效果&#xff0c;但是在動畫或游戲中&#xff0c;我們經常可以看到導彈發射后的彈道是不規則的&#xff0c;扭扭曲曲的飛行&#xff0c;然后擊…

數字生態系統的演進與企業API管理的關鍵之路

數字生態系統的演進與企業API管理的關鍵之路 在數字化時代&#xff0c;企業正經歷著一場轉型的浪潮&#xff0c;而API&#xff08;應用程序編程接口&#xff09;扮演著至關重要的角色。API如同一座橋梁&#xff0c;將組織內部的價值轉化為可市場化的產品&#xff0c;從而增強企…

韓國站群服務器在全球網絡架構中的重要作用?

韓國站群服務器在全球網絡架構中的重要作用? 在全球互聯網的蓬勃發展中&#xff0c;站群服務器作為網絡架構的核心組成部分之一&#xff0c;扮演著至關重要的角色。韓國站群服務器以其卓越的技術實力、優越的地理位置、穩定的網絡基礎設施和強大的安全保障能力&#xff0c;成…

LeetCode 題目 118:楊輝三角

題目描述 給定一個非負整數 numRows&#xff0c;生成楊輝三角的前 numRows 行。在楊輝三角中&#xff0c;每個數是它左上方和右上方的數的和。 楊輝三角解析 在這個詳解中&#xff0c;我們將使用 ASCII 圖形來說明楊輝三角的構建過程&#xff0c;包括逐行添加新的行的過程。…

250 基于matlab的5種時頻分析方法((短時傅里葉變換)STFT

基于matlab的5種時頻分析方法&#xff08;(短時傅里葉變換)STFT,Gabor展開和小波變換,Wigner-Ville&#xff08;WVD&#xff09;,偽Wigner-Ville分布(PWVD),平滑偽Wigner-Ville分布&#xff08;SPWVD&#xff09;,每條程序都有詳細的說明&#xff0c;設置仿真信號進行時頻輸出。…