klock 分布式鎖重大更新

2021-09-19 15:08:30 字數 864 閱讀 3749

開發四年只會寫業務**,分布式高併發都不會還做程式設計師? >>>

基於redis的分布式鎖spring-boot starter元件,使得專案擁有分布式鎖能力變得異常簡單,支援spring boot,和spirng mvc等spring相關專案。基於註解驅動,支援spring spel,方便的定義鎖的key的粒度

本次更新主要新增了【鎖等待超時】和【鎖持有超時】的處理策略,這兩個引數是為了解決分布式鎖的死鎖問題而設定的,而增加這兩個策略是為了在極端情況下鎖失效時業務能夠感知並處理。

因為基於redis實現分布式鎖,如果使用不當,會在以下場景下遇到鎖超時的問題:

加鎖超時處理策略(locktimeoutstrategy):

釋放鎖時超時處理策略(releasetimeoutstrategy):

@klock(name="foo-service", waittime=2, customlocktimeoutstrategy = "customlocktimeout")

public string foo4(string foo, string bar) catch (interruptedexception e)

return "foo4";

}private string customlocktimeout(string foo, string bar)

如上**,在鎖獲取超時時,會呼叫使用者自定義的方法。這個和分布式事務tcc的用法類似,在使用自定義處理策略時,需要提供乙個方法入參和被加鎖的方法一直的方法。

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式專題 分布式鎖

在傳統的單體應用架構中,遇到併發安全性問題時我們可以通過同步鎖synchronized,同步 塊,reentrantlock等方式都可以解決,但隨著業務的發展,單體應用架構不能滿足龐大的使用者請求量,於是分布式系統應用而生,在分布式系統中,由於每個系統都執行在不同的伺服器上,有著不同的jvm,所以j...

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...