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

2021-07-03 14:42:33 字數 478 閱讀 4157

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

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

redis提供乙個方法,setnx key value。將 key 的值設為 value ,當且僅當 key 不存在。若給定的 key 已經存在,則 setnx 不做任何動作。設定成功,返回 1 。設定失敗,返回 0 。也就是說,當這個key存在時,返回0,其他人已經拿到鎖並進入臨界區了。

那麼這個key就是一把鎖,如果返回1,表示獲取互斥鎖成功,然後可以進入臨界區。返回0,表示獲取失敗,無法進入臨界區。

示例**:

try 

} catch (exception e)

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

新開發的系統須要控制每乙個時刻 快取的gc執行緒有且僅僅有乙個在執行,假設有多個執行緒同一時候執行,會造成系統崩潰。假設僅僅有乙個jvm程序那麼非常好辦。簡單的借助synchronizedkeyword即可了。但是我的系統要部署在多台server,每台server上部署多個例項上。而synchron...

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

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

Redis分布式快取實現

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