最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redisson分布式鎖解鎖異常問題

 更新時間:2024年12月24日 08:43:08   作者:知知之之  
文章主要描述了在使用Redisson進行分布式鎖操作時,遇到的`IllegalMonitorStateException`異常,通過分析報錯信息,作者發(fā)現(xiàn)了問題的根源在于線程嘗試解鎖但未按順序執(zhí)行,作者提出了兩種解決方案:在解鎖前增加判斷,確保線程已獲得鎖

問題現(xiàn)象

程序中的redission執(zhí)行unlock()報錯如下:

java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id:

從報錯信息可知:嘗試解鎖,而不是由當前線程按節(jié)點 ID 鎖定

問題復現(xiàn)

//獲取鎖對象
RLock lock = redissonClient.getLock(key);

try{
   //獲取鎖
   boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
   if (!tryLock) {
   //拋出業(yè)務異常
   }
}catch(){
    //捕獲異常
}finally{
    //解鎖
    lock.unlock();
}

排查過程

如上代碼,線程無論是否有獲取鎖,都是需要去執(zhí)行解鎖方法,當線程沒有獲得鎖,執(zhí)行unlock()就會報

java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id:錯誤

解決方案

1、在解鎖時增加判斷

//判斷要解鎖的key是否已被鎖定;判斷要解鎖的key是否被當前線程持有
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
    lock.unlock();
}

2、優(yōu)化代碼

在執(zhí)行unlock()確保線程已經(jīng)獲得鎖

//獲取鎖對象
RLock lock = redissonClient.getLock(key);
boolean tryLock;
try {
    tryLock = lock.tryLock(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
    throw new Exception("獲取分布式鎖失敗,請稍后再試");
}

if (!tryLock) {
    throw new Exception("請稍后再試");
}

try{
   //拋出業(yè)務異常
}catch(){
    //捕獲異常
}finally{
    //解鎖
    lock.unlock();
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Redis分布式鎖詳細介紹

    Redis分布式鎖詳細介紹

    大家好,本篇文章主要講的是Redis分布式鎖詳細介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • redis服務啟動與停止方式

    redis服務啟動與停止方式

    這篇文章主要介紹了redis服務啟動與停止方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Redis配置文件代碼講解

    Redis配置文件代碼講解

    在本篇文章里小編給大家整理的是一篇關于Redis配置文件的說明內容,需要的朋友們可以學習下。
    2020-03-03
  • redis部署及各種數(shù)據(jù)類型使用命令詳解

    redis部署及各種數(shù)據(jù)類型使用命令詳解

    這篇文章主要介紹了redis部署及各種數(shù)據(jù)類型使用命令,編譯安裝redis及部署過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • redis實現(xiàn)sentinel哨兵架構的方法

    redis實現(xiàn)sentinel哨兵架構的方法

    哨兵是一個分布式系統(tǒng),可以在一個架構中運行多個哨兵(sentinel) 進程,這些進程使用流言協(xié)議(gossip protocols)來接收關于Master主服務器是否下線的信息,這篇文章主要介紹了redis實現(xiàn)sentinel哨兵架構,需要的朋友可以參考下
    2022-11-11
  • Redis集群修改密碼方式

    Redis集群修改密碼方式

    本文詳細介紹了三種不重啟集群和需要重啟集群的Redis配置更新方法,幫助用戶高效管理Redis集群配置
    2026-06-06
  • redis list類型命令的實現(xiàn)

    redis list類型命令的實現(xiàn)

    本文主要介紹了redis list類型命令的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Redis bgsave的使用小結

    Redis bgsave的使用小結

    BGSAVE是Redis用于生成 RDB 持久化文件的核心操作,本文就來詳細的介紹一下Redis bgsave的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-04-04
  • Redis全文搜索教程之創(chuàng)建索引并關聯(lián)源數(shù)據(jù)的教程

    Redis全文搜索教程之創(chuàng)建索引并關聯(lián)源數(shù)據(jù)的教程

    RediSearch提供了一種簡單快速的方法對 hash 或者 json 類型數(shù)據(jù)的任何字段建立二級索引,然后就可以對被索引的 hash 或者 json 類型數(shù)據(jù)字段進行搜索和聚合操作,這篇文章主要介紹了Redis全文搜索教程之創(chuàng)建索引并關聯(lián)源數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • Redis中key的操作命令

    Redis中key的操作命令

    本文主要介紹了Redis中key的操作命令,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06

最新評論

武定县| 丹寨县| 岳阳县| 巴楚县| 会泽县| 渭南市| 瑞丽市| 台南县| 三门县| 莒南县| 台州市| 郁南县| 昭苏县| 台前县| 连州市| 乌苏市| 定安县| 莱芜市| 长垣县| 灌阳县| 永川市| 霍城县| 德保县| 绥棱县| 新竹县| 耒阳市| 中西区| 资阳市| 道真| 蕲春县| 延安市| 墨竹工卡县| 宜州市| 温泉县| 宿松县| 长泰县| 怀化市| 安阳县| 偃师市| 项城市| 桂阳县|