redisson常用加鎖方式詳解
更新時間:2026年01月16日 08:38:18 作者:清夢壓星河_Ciao
文章介紹了兩種Redisson加鎖方式的區(qū)別:基本的RLock方式和使用RedissonDistributedLocker的tryLock方式,RLock需要手動處理鎖的等待和持有時間,而tryLock則提供了更高層次的封裝,簡化了鎖的操作,并且在超時后會自動返回或釋放鎖
RLock lock = redissonClient.getLock("lock:order:" + order);和
redissonDistributedLocker.tryLock("lock:order:" + order, TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);這兩種加鎖方式的區(qū)別如下:
1、基本的加鎖方式 (RLock)
RLock lock = redissonClient.getLock("lock:order:" + order);
- 獲取鎖: 通過 redissonClient.getLock() 獲取一個 RLock 對象,并且傳入一個鍵(key),這個鍵可以是任何字符串。這里的鍵是
"lock:order:" + order,它通常是基于某個業(yè)務標識(比如訂單號)來唯一標識鎖的。這樣,每個訂單的鎖就是唯一的,其他訂單不會被影響。 - 鎖的操作: 可以使用 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 方法通常有以下幾個參數(shù):
- 鎖的名稱: 即鎖的 key,這里傳入了一個包含業(yè)務標識的值。
- 等待時間: 即如果鎖被占用,最多等待的時間,單位通常是秒或毫秒。
- 持有時間: 獲取到鎖后,鎖自動過期的時間,也就是鎖的最大持有時間。即使操作沒有結束,鎖也會在這個時間后自動釋放。
- 單位: 時間單位,可以是秒、毫秒等。
鎖的操作:
- tryLock 會嘗試獲取鎖,如果鎖被占用,且沒有在 DEFAULT_WAIT_TIME 規(guī)定的時間內成功獲取鎖,則會放棄,返回 false。
- 如果獲取成功,則鎖會在 DEFAULT_HOLD_TIME 時間后自動釋放。這個機制有助于避免死鎖和長時間占用鎖。
3、主要區(qū)別
封裝和簡化:
redissonDistributedLocker.tryLock()是對 Redisson 鎖操作的封裝,提供了更高層次的 API,使得鎖的操作更加簡便且靈活,減少了需要手動處理的鎖等待和持有時間等邏輯。- 相比之下,直接使用 RLock 的方法可能需要你手動處理更多的邏輯(如等待、超時等)。
鎖的超時管理:
- RLock 本身提供了 lock() 和 tryLock() 方法,可以通過
tryLock(long waitTime, long leaseTime, TimeUnit unit)來設置等待時間和鎖持有時間。 redissonDistributedLocker.tryLock()通過封裝的方式,簡化了這種超時管理,它會在超時后自動返回失敗或自動釋放鎖,減少了代碼的復雜度。
使用場景:
- RLock 適用于你需要更多控制或者自定義邏輯的場景,比如需要自己處理鎖等待時間、持有時間等。
- redissonDistributedLocker 更適合在業(yè)務中封裝常見的分布式鎖操作,它提供了簡單的 API 以便快速實現(xiàn)分布式鎖,特別是當你有一套統(tǒng)一的鎖處理邏輯時。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
教你使用IDEA搭建spring源碼閱讀環(huán)境的詳細步驟
這篇文章主要介紹了使用IDEA搭建spring源碼閱讀環(huán)境的詳細步驟,本文分兩步通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-08-08
微信js-sdk+JAVA實現(xiàn)“分享到朋友圈”和“發(fā)送給朋友”功能詳解
本文分享了微信js-sdk+JAVA實現(xiàn)“分享到朋友圈”和“發(fā)送給朋友”功能介紹,大家可以參考一下2018-03-03

