redis分布式鎖(redisson)

2021-10-23 06:08:29 字數 1086 閱讀 6111

注意點說明:

獲取鎖物件時,需要加入rediskey的鎖物件標識,用於和其他業務的鎖物件做區分,防止釋放鎖時把別人的鎖釋放掉

執行緒1獲取鎖成功後,執行緒2會while迴圈,自旋等待獲取鎖知道執行緒1釋放後獲取成功

除了一般普通的鎖之外,redisson中還提供了讀寫鎖,用來解決多讀,少寫的情況:場景:n個執行緒在讀取資源,1個執行緒去修改,修改了一半發生了回滾,n個讀執行緒會不會讀取到修改了一般又回滾的髒資料呢,此時1個寫執行緒可以加寫鎖,n個讀執行緒可以加讀鎖,獲取寫鎖後所有的讀鎖會進入自旋等待,直到讀鎖主動或回滾釋放後,讀鎖才能獲繼續讀取資源。所有的讀鎖是共享鎖,不會互斥,所以多個讀執行緒不會有鎖等待,不會影響效率。

redisson底層採用的是lua指令碼來確保redis操作的原子性

@autowired

@lazy

private redissonclient redissonclient;

public void locktest() :" + "鎖的唯一標識(業務字段)";

// 由rediskey獲取分布式鎖物件

rlock lock = redissonclient.getlock(rediskey);

try catch (exception e) ,異常資訊:{}",rediskey,e);

throw new serviceexception("錯誤碼");

}// 判斷是否獲取成功

if (!lockresult) ,異常資訊:{}",rediskey,e);

throw new serviceexception("錯誤碼")

}// 開始執行業務**,這裡的**越少越好

try catch (exception e) ",e)

thorw new serviceexception("錯誤碼")

} finally

}

用Redis實現分布式鎖以及redission使用

先看下,redis分布式是怎麼演變的來的,redission如何使用的。redisson依賴 org.redisson groupid redisson artifactid 2.2.13 version dependency stringredistemplate依賴 業務疊加之後,一台伺服器解決...

redis分布式鎖

redis分布式鎖 直接上 我寫了四個redis分布式鎖的方法,大家可以提個意見 第一種方法 redis分布式鎖 param timeout public void lock long timeout thread.sleep 100 catch exception e override publi...

Redis分布式鎖

分布式鎖一般有三種實現方式 1.資料庫樂觀鎖 2.基於redis的分布式鎖 3.基於zookeeper的分布式鎖.首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件 互斥性。在任意時刻,只有乙個客戶端能持有鎖。不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保...