redisson鎖tryLock的正確使用方式
更新時間:2023年12月07日 10:07:28 作者:小螞蟻hjk
這篇文章主要介紹了redisson鎖tryLock的正確使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
redisson鎖tryLock的使用
方式一
RLock lock = redissonClient.getLock("Export:create:" + Context.get().getCorpId()); try { if (lock.tryLock(5, 10, TimeUnit.SECONDS)) { //業(yè)務(wù)處理 } else { Assert.isTrue(false, "排隊中,請稍后重試!"); } } catch (InterruptedException e) { Assert.isTrue(false, "請勿重復(fù)操作!"); } finally { if (lock.isLocked()) { lock.unlock(); } }
方式二
RLock lock = redisson.getLock(String.format(REWARD_CARD_LOCK_KEY, 2)); try { //嘗試加鎖,最多等待10秒,上鎖以后10秒自動解鎖 if (lock.tryLock(10,10, TimeUnit.SECONDS)) { try { //處理 logger.info("tryLock thread---{}, lock:{}", Thread.currentThread().getId(), lock); } catch (Exception e) { } finally { //解鎖 lock.unlock(); } } } catch (InterruptedException e) { //處理 //保留中斷發(fā)生的證據(jù),以便調(diào)用棧中更高層的代碼能知道中斷,并對中斷作出響應(yīng) Thread.currentThread().interrupt(); } public void testReentrantLock(RedissonClient redisson){ RLock lock = redisson.getLock("anyLock"); try{ // 1. 最常見的使用方法 //lock.lock(); // 2. 支持過期解鎖功能,10秒鐘以后自動解鎖, 無需調(diào)用unlock方法手動解鎖 //lock.lock(10, TimeUnit.SECONDS); // 3. 嘗試加鎖,最多等待3秒,上鎖以后10秒自動解鎖 boolean res = lock.tryLock(3, 10, TimeUnit.SECONDS); if(res){ //成功 // do your business } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis+PHP實現(xiàn)用戶消息推送每天最多通知2次的功能
在開發(fā)應(yīng)用程序中,經(jīng)常需要向用戶推送消息通知,但是為了避免過多的打擾用戶,我們希望限制每天最多通知2次,本篇博文將介紹如何使用PHP和Redis實現(xiàn)這一功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10多維度深入分析Redis的5種基本數(shù)據(jù)結(jié)構(gòu)
此篇文章主要對Redis的5種基本數(shù)據(jù)類型,即字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted?Set),從使用場景和底層結(jié)構(gòu)出發(fā),進(jìn)行多維度深入分析。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11