redisson常用加鎖方式

RLock lock = redissonClient.getLock("lock:order:" + order);和redissonDistributedLocker.tryLock("lock:order:" + order, TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);這兩種加鎖方式的區別如下:

  1. 基本的加鎖方式 (RLock)

    RLock lock = redissonClient.getLock("lock:order:" + order);
    

    獲取鎖: 通過 redissonClient.getLock() 獲取一個 RLock 對象,并且傳入一個鍵(key),這個鍵可以是任何字符串。這里的鍵是 "lock:order:" + order,它通常是基于某個業務標識(比如訂單號)來唯一標識鎖的。這樣,每個訂單的鎖就是唯一的,其他訂單不會被影響。
    鎖的操作: 可以使用 lock.lock() 來請求鎖,lock.unlock() 來釋放鎖。它還支持帶超時的鎖,例如 lock.tryLock(long waitTime, long leaseTime, TimeUnit unit),這可以控制等待的時間和鎖的持有時間。
    鎖的特點: 這種方式是直接通過 Redisson API 操作鎖的基礎方式,較為簡單和直接。

  2. 使用 RedissonDistributedLocker.tryLock()

    redissonDistributedLocker.tryLock("lock:order:" + order,TimeUnit.SECONDS,RedisLockKey.DEFAULT_WAIT_TIME,RedisLockKey.DEFAULT_HOLD_TIME);
    

    獲取鎖: redissonDistributedLocker 是一個封裝了 Redisson 鎖操作的工具類,它通常用于對鎖的獲取和釋放進行更高層次的封裝和抽象。tryLock 是嘗試獲取鎖的方法,可以指定等待時間和鎖持有時間。"lock:order:" + order作為鎖的 key

    tryLock 方法通常有以下幾個參數:
    鎖的名稱: 即鎖的 key,這里傳入了一個包含業務標識的值。
    等待時間: 即如果鎖被占用,最多等待的時間,單位通常是秒或毫秒。
    持有時間: 獲取到鎖后,鎖自動過期的時間,也就是鎖的最大持有時間。即使操作沒有結束,鎖也會在這個時間后自動釋放。
    單位: 時間單位,可以是秒、毫秒等。

    鎖的操作: tryLock 會嘗試獲取鎖,如果鎖被占用,且沒有在 DEFAULT_WAIT_TIME 規定的時間內成功獲取鎖,則會放棄,返回 false。如果獲取成功,則鎖會在 DEFAULT_HOLD_TIME 時間后自動釋放。這個機制有助于避免死鎖和長時間占用鎖。

  3. 主要區別
    封裝和簡化:redissonDistributedLocker.tryLock() 是對 Redisson 鎖操作的封裝,提供了更高層次的 API,使得鎖的操作更加簡便且靈活,減少了需要手動處理的鎖等待和持有時間等邏輯。相比之下,直接使用 RLock 的方法可能需要你手動處理更多的邏輯(如等待、超時等)。

鎖的超時管理:

RLock 本身提供了 lock() 和 tryLock() 方法,可以通過 tryLock(long waitTime, long leaseTime, TimeUnit unit)來設置等待時間和鎖持有時間。
redissonDistributedLocker.tryLock() 通過封裝的方式,簡化了這種超時管理,它會在超時后自動返回失敗或自動釋放鎖,減少了代碼的復雜度。

使用場景:

RLock 適用于你需要更多控制或者自定義邏輯的場景,比如需要自己處理鎖等待時間、持有時間等。
redissonDistributedLocker 更適合在業務中封裝常見的分布式鎖操作,它提供了簡單的 API 以便快速實現分布式鎖,特別是當你有一套統一的鎖處理邏輯時。

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

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

相關文章

Go 微服務框架 | 路由實現

文章目錄 不用框架實現web接口實現簡單的路由實現分組路由支持不同的請求方式支持同一個路徑的不同請求方式前綴樹應用前綴樹完善路由代碼 不用框架實現web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通過模板實現自動發現對tcp端口批量監控

主要為了解決監控大量端口,避免繁瑣的重復操作監控項和觸發器 諸位~ 僅供參考哈 自動發現監控參考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先創建一個模板 自定義名稱和群組 創建自動發現規則 模板——自動發現——創建發現規則…

Mysql備忘記錄

1、簡介 Mysql操作經常忘記命令,本文將持續記錄Mysql一些常用操作。 2、常見問題 2.1、忘記密碼 # 1、首先停止Mysql服務 systemctl stop mysqld # windows 從任務管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【藍橋杯】15屆JAVA研究生組F回文字符串

一、思路 1.這題去年考的時候想的是使用全排列進行嘗試,實際不用這么麻煩,只用找到第一個和最后一個非特殊字符串的位置,然后分別向內檢查是否對稱,向外檢查是否對稱直到左指針小于0(可以通過添加使其對稱) 2.至于如何找到第一個…

X 進制減法

題目鏈接: 思路: X進制數321怎么轉換為十進制數為65?如下圖: ①題目要求我們求 A - B 的最小值,對第 i 位,要求 A[i] - B[i] 的最小值,當進制越小的時候差值越小,但進制要比 max&…

java線程安全-單例模式-線程通信

首先看看單例模式的寫法 首先我們先來回顧一下餓漢式單例模式: class Singleton{private static Singleton singletonnew Singleton();private Singleton(){}public static Singleton getInstrance(){return singleton;} } public class Test{public static void …

大數據技術之SPARK

Spark Core 什么是 RDD 代碼中是一個抽象類,它代表一個彈性的、不可變、可分區、里面的元素可并行計算的集合 彈性 存儲的彈性:內存與磁盤的自動切換; 容錯的彈性:數據丟失可以自動恢復; 計算的彈性:…

Go 語言范圍 (Range)

Go 語言范圍 (Range) Go 語言是一種靜態強類型、編譯型、并發型編程語言,由 Google 開發。它的簡潔性和高效性使其成為眾多開發者的首選。在 Go 語言中,range 是一個非常有用的關鍵字,用于遍歷數組、切片、字符串以及通道(channe…

VUE中數據綁定之OptionAPI

<template> <div> 姓名:<input v-model="userName" /> {{ userName }} <br /> 薪水:<input type="number" v-model="salary" /> <br /> <button v-on:click="submit">提交</button>…

react動態路由

框架的權限控制&#xff08;在config.ts中配置&#xff09; export default {access: {}, }; 權限配置文件&#xff08;access.ts&#xff09; 新建 src/access.ts &#xff0c;在該文件中 export default 一個函數&#xff0c;定義用戶擁有的權限 該文件需要返回一個 functi…

Android里面如何優化xml布局

在 Android 開發中&#xff0c;以下是系統化的優化方案&#xff0c;從基礎到高級分層解析&#xff1a; 一、基礎優化策略 1. 減少布局層級 問題&#xff1a;每增加一層布局&#xff0c;測量/布局時間增加 1-2ms 解決方案&#xff1a; <!-- 避免嵌套 --> <LinearLayo…

基于STM32、HAL庫的IP6525S快充協議芯片簡介及驅動程序設計

一、簡介: IP6525S是一款高性能的同步降壓DC-DC轉換器芯片,具有以下特點: 輸入電壓范圍:4.5V至32V 輸出電壓范圍:0.8V至30V 最大輸出電流:5A 效率高達95% 可編程開關頻率(100kHz-1MHz) 支持PWM和PFM模式 內置過流保護、過溫保護等功能 該芯片常用于工業控制、通信設備…

二分算法的入門筆記

二分查找 使用前提&#xff1a;有序。可理解為枚舉的一種技巧。時間復雜度&#xff1a; l o g ( n ) log(n) log(n) 基礎模版代碼 使用時根據情景進行相應的變化。注意跳出條件and分支處理方式and返回答案&#xff0c;三者之間的配合&#xff0c;不要進入死循環。可以在模擬…

輕量級Java跨包調用(完全解耦)

Java函數式命令模式 輕量級跨包調用解耦方案&#xff0c;讓跨包調用就像調用本地接口那樣簡單。適用與具有公共依賴的兩個jar包&#xff0c;但是又不想相互引入對方作為依賴。 函數式命令模式&#xff0c;很好地實現了跨包調用解耦的目標&#xff0c;并且通過泛型JSON動態轉換保…

離散數學問題集--問題5.9

問題 5.9 綜合了計算機組成原理、數字邏輯和離散數學中的關鍵概念&#xff0c;旨在幫助學生理解二進制算術運算的硬件實現、邏輯門與算術運算的關系&#xff0c;以及如何使用數學方法來驗證數字系統的正確性。它強調了從規范到實現再到驗證的完整過程。 思想 函數抽象&#xf…

OpenLayers:海量圖形渲染之矢量切片

最近由于在工作中涉及到了海量圖形渲染的問題&#xff0c;因此我開始研究相關的解決方案。在咨詢了許多朋友之后發現矢量切片似乎是行業內最常用的一種解決方案&#xff0c;于是我便開始研究它該如何使用。 一、什么是矢量切片 矢量切片按照我的理解就是用柵格切片的方式把矢…

神經網絡入門—自定義網絡

網絡模型 定義一個兩層網絡 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F# 定義神經網絡模型 class Net(nn.Module):def __init__(self, init_x0.0):super().__init__()self.fc1 nn.Linear(1, 10)self.fc2 nn.Linear(…

無人機裝調與測試

文章目錄 前言一、無人機基本常識/預備知識&#xff08;一&#xff09;無人機飛行原理無人機硬件組成/各組件作用1.飛控2.GPS3.接收機4.電流計5.電調6.電機7.電池8.螺旋槳9.UBEC&#xff08;穩壓模塊&#xff09; &#xff08;二&#xff09;飛控硬件簡介&#xff08;三&#x…

2024年-全國大學生數學建模競賽(CUMCM)試題速瀏、分類及淺析

2024年-全國大學生數學建模競賽(CUMCM)試題速瀏、分類及淺析 全國大學生數學建模競賽&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是國家教委高教司和中國工業與應用數學學會共同主辦的面向全國大學生的群眾性科技活動&#xff0c;目的在于激…

Linux入門指南:從零開始探索開源世界

&#x1f680; 前言 大家好&#xff01;今天我們來聊一聊Linux這個神奇的操作系統~ &#x1f916; 很多小伙伴可能覺得Linux是程序員專屬&#xff0c;其實它早已滲透到我們生活的各個角落&#xff01;本文將帶你了解Linux的誕生故事、發行版選擇攻略、應用領域&#xff0c;還有…