借助共享快取redis實現分布式鎖

2021-09-07 05:44:10 字數 552 閱讀 6518

新開發的系統須要控制每乙個時刻**快取的gc執行緒有且僅僅有乙個在執行,假設有多個執行緒同一時候執行,會造成系統崩潰。假設僅僅有乙個jvm程序那麼非常好辦。簡單的借助synchronizedkeyword即可了。

但是我的系統要部署在多台server,每台server上部署多個例項上。而synchronized僅僅在單程序裡實用。

考慮借助共享資料來源redis實現功能。

redis提供乙個方法,setnx key value。將 key 的值設為 value ,當且僅當 key 不存在。若給定的 key 已經存在。則 setnx 不做不論什麼動作。

設定成功。返回 1 。

設定失敗,返回 0 。也就是說,當這個key存在時。返回0。其它人已經拿到鎖並進入臨界區了。

那麼這個key就是一把鎖,假設返回1,表示獲取相互排斥鎖成功,然後能夠進入臨界區。返回0,表示獲取失敗。無法進入臨界區。

演示樣例**:

try 

} catch (exception e) finally

借助共享快取redis實現分布式鎖

新開發的系統需要控制每個時刻 快取的gc執行緒有且只有乙個在執行,如果有多個執行緒同時執行,會造成系統崩潰。如果只有乙個jvm程序那麼很好辦,簡單的借助synchronized關鍵字就行了。可是我的系統要部署在多台伺服器,每台伺服器上部署多個例項上。而synchronized僅僅在單程序裡有用。考慮...

借助共享快取redis實現分布式鎖

新開發的系統需要控制每個時刻 快取的gc執行緒有且只有乙個在執行,如果有多個執行緒同時執行,會造成系統崩潰。如果只有乙個jvm程序那麼很好辦,簡單的借助synchronized關鍵字就行了。可是我的系統要部署在多台伺服器,每台伺服器上部署多個例項上。而synchronized僅僅在單程序裡有用。考慮...

Redis分布式快取實現

定義 特點快取解決的問題 快取能提高效率,那專案中所有書庫加入快取是否更好?本地快取與分布式快取的區別?mybatis中應用級快取 二級快取 sqlsessionfactory級別快取 所有會話共享 如何開啟二級快取 本地快取 檢視cache標籤快取實現 自定義rediscache實現 如何解決關聯...