亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redisson分布式鎖解鎖異常問(wèn)題

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

問(wèn)題現(xiàn)象

程序中的redission執(zhí)行unlock()報(bào)錯(cuò)如下:

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

從報(bào)錯(cuò)信息可知:嘗試解鎖,而不是由當(dāng)前線程按節(jié)點(diǎn) ID 鎖定

問(wèn)題復(fù)現(xiàn)

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

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

排查過(guò)程

如上代碼,線程無(wú)論是否有獲取鎖,都是需要去執(zhí)行解鎖方法,當(dāng)線程沒(méi)有獲得鎖,執(zhí)行unlock()就會(huì)報(bào)

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

解決方案

1、在解鎖時(shí)增加判斷

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

2、優(yōu)化代碼

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Redis緩存降級(jí)的四種策略

    Redis緩存降級(jí)的四種策略

    在高并發(fā)系統(tǒng)架構(gòu)中,Redis作為核心緩存組件扮演著至關(guān)重要的角色,它不僅能夠顯著提升系統(tǒng)響應(yīng)速度,還能有效減輕數(shù)據(jù)庫(kù)壓力,然而,當(dāng)Redis服務(wù)出現(xiàn)故障、性能下降或連接超時(shí)時(shí),如果沒(méi)有適當(dāng)?shù)慕导?jí)機(jī)制,可能導(dǎo)致系統(tǒng)雪崩,所以本文給大家介紹了Redis緩存降級(jí)的四種策略
    2025-04-04
  • Redis Cluster 字段模糊匹配及刪除

    Redis Cluster 字段模糊匹配及刪除

    在數(shù)據(jù)庫(kù)內(nèi)我們可以通過(guò)like關(guān)鍵字、%、*或者REGEX關(guān)鍵字進(jìn)行模糊匹配。而在Redis內(nèi)我們?nèi)绾芜M(jìn)行模糊匹配呢?本文就來(lái)介紹一下
    2021-05-05
  • 利用Redis?lua實(shí)現(xiàn)高效讀寫(xiě)鎖的代碼實(shí)例

    利用Redis?lua實(shí)現(xiàn)高效讀寫(xiě)鎖的代碼實(shí)例

    這篇文章給大家介紹了如何利用Redis?lua實(shí)現(xiàn)高效的讀寫(xiě)鎖,讀寫(xiě)鎖的好處就是能幫助客戶(hù)讀到的數(shù)據(jù)一定是最新的,寫(xiě)鎖是排他鎖,而讀鎖是一個(gè)共享鎖,需要的朋友可以參考下
    2024-01-01
  • redis不能訪問(wèn)本機(jī)真實(shí)ip地址的解決方案

    redis不能訪問(wèn)本機(jī)真實(shí)ip地址的解決方案

    這篇文章主要介紹了redis不能訪問(wèn)本機(jī)真實(shí)ip地址的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Redis?Key使用{}原因分析

    Redis?Key使用{}原因分析

    這篇文章主要為大家介紹了Redis中Key中為什么要使用{}原因分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • redis計(jì)數(shù)器與數(shù)量控制的實(shí)現(xiàn)

    redis計(jì)數(shù)器與數(shù)量控制的實(shí)現(xiàn)

    使用Redis計(jì)數(shù)器可以輕松地解決數(shù)量控制的問(wèn)題,同時(shí)還能有效地提高應(yīng)用的性能,本文主要介紹了redis計(jì)數(shù)器與數(shù)量控制的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 淺談Redis阻塞的9種情況

    淺談Redis阻塞的9種情況

    本文主要介紹了淺談Redis阻塞的9種情況,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • redis性能優(yōu)化之生產(chǎn)中實(shí)際遇到的問(wèn)題及排查總結(jié)

    redis性能優(yōu)化之生產(chǎn)中實(shí)際遇到的問(wèn)題及排查總結(jié)

    這篇文章主要介紹了redis性能優(yōu)化之生產(chǎn)中實(shí)際遇到的問(wèn)題及排查總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    大家好,本篇文章主要講的是利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Redis去重的3種不同方法匯總

    Redis去重的3種不同方法匯總

    Redis是完全開(kāi)源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Redis去重的3種不同方法,需要的朋友可以參考下
    2021-11-11

最新評(píng)論