Redisson分布式鎖解鎖異常問(wèn)題
問(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è)參考,也希望大家多多支持腳本之家。
- Redis分布式鎖的幾種實(shí)現(xiàn)方法
- 使用Redis實(shí)現(xiàn)分布式鎖的代碼演示
- Redis使用SETNX命令實(shí)現(xiàn)分布式鎖
- Redis分布式鎖使用及說(shuō)明
- redis分布式鎖實(shí)現(xiàn)示例
- Redis 實(shí)現(xiàn)分布式鎖時(shí)需要考慮的問(wèn)題解決方案
- Redis實(shí)現(xiàn)分布式鎖的示例代碼
- Redission實(shí)現(xiàn)分布式鎖lock()和tryLock()方法的區(qū)別小結(jié)
- 從原理到實(shí)踐分析?Redis?分布式鎖的多種實(shí)現(xiàn)方案
- Redis本地鎖和分布式鎖的區(qū)別小結(jié)
相關(guān)文章
利用Redis?lua實(shí)現(xiàn)高效讀寫鎖的代碼實(shí)例
這篇文章給大家介紹了如何利用Redis?lua實(shí)現(xiàn)高效的讀寫鎖,讀寫鎖的好處就是能幫助客戶讀到的數(shù)據(jù)一定是最新的,寫鎖是排他鎖,而讀鎖是一個(gè)共享鎖,需要的朋友可以參考下2024-01-01
redis不能訪問(wèn)本機(jī)真實(shí)ip地址的解決方案
這篇文章主要介紹了redis不能訪問(wèn)本機(jī)真實(shí)ip地址的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
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性能優(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ù)提交功能,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12

