高性能分布式鎖的另一種實現(xiàn):Redisson

以往在項目中涉及到分布式鎖時,都是結(jié)合redisTemplate采用類原生的方式編寫,代碼量不少,還容易出現(xiàn)鎖死的情況,近來無意間在看到某篇文章中發(fā)現(xiàn)了redisson,如獲珍寶,工具譜中又多了一個利器(公眾號回復關(guān)鍵字“工具”)。

分布式鎖的關(guān)鍵點在于加鎖與解鎖其間能不能保持連續(xù)性,redisson為我們提供了一種比較優(yōu)雅簡單的方式:

RLock lock = redisson.getLock("anyLock");

// 最常見的使用方法

lock.lock();

// 加鎖以后10秒鐘自動解鎖,無需調(diào)用unlock方法手動解鎖

lock.lock(10, TimeUnit.SECONDS);

// 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖

boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);

if (res) {

? try {

? ? ...

? } finally {

? ? ? lock.unlock();

? }

}

//同時還為分布式鎖提供了異步執(zhí)行的相關(guān)方法

lock.lockAsync();

lock.lockAsync(10, TimeUnit.SECONDS);

Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS)

在分布式鎖的基礎(chǔ)上還提供了聯(lián)鎖(MultiLock),讀寫鎖(ReadWriteLock),公平鎖(FairLock),紅鎖(RedLock),信號量(Semaphore),可過期性信號量(PermitExpirableSemaphore)和閉鎖(CountDownLatch)這些實際當中對多線程高并發(fā)應用至關(guān)重要的基本部件。正是通過實現(xiàn)基于Redis的高階應用方案,使Redisson成為構(gòu)建分布式系統(tǒng)的重要工具。

Redisson基于NIO的Netty框架,同其他Redis Java客戶端有著很大的區(qū)別,相比之下其他客戶端提供的功能還僅僅停留在作為數(shù)據(jù)庫驅(qū)動層面上,比如僅針對Redis提供連接方式,發(fā)送命令和處理返回結(jié)果等。

基于Java實用工具包中常用接口,為使用者提供了一系列具有分布式特性的常用工具類。使得原本作為協(xié)調(diào)單機多線程并發(fā)程序的工具包獲得了協(xié)調(diào)分布式多機多線程并發(fā)系統(tǒng)的能力,大大降低了設(shè)計和研發(fā)大規(guī)模分布式系統(tǒng)的難度。同時結(jié)合各富特色的分布式服務,更進一步簡化了分布式環(huán)境中程序相互之間的協(xié)作。而其它redis java客戶端如果要使用一些高層次的應用則只能依靠使用者自行實現(xiàn),不太友好。

Redisson實現(xiàn)分布式鎖僅僅是一個方面的應用,其它還有很多便捷的用法。本篇僅是提供一個引子,更多詳細文檔介紹參考項目介紹的wiki內(nèi)容。

擴展閱讀:

Redis的三個框架:Jedis,Redisson,Lettuce

Jedis 地址:https://github.com/xetorthio/jedis,是Redis的Java實現(xiàn)客戶端,提供了比較全面的Redis命令的支持。SpringBoot1.x系列中默認采用的是jedis。

Redisson 官網(wǎng)地址:https://redisson.org/,實現(xiàn)了分布式和可擴展的Java數(shù)據(jù)結(jié)構(gòu)。

Lettuce 官網(wǎng)地址:https://lettuce.io/,高級Redis客戶端,用于線程安全同步,異步和響應使用,支持集群,Sentinel,管道和編碼器。SpringBoot2.x系列中拋棄了原有的jedis,默認采用lettuce。

相關(guān)文章推薦:

突破自己的技術(shù)思維

如何寫出一篇高質(zhì)量的技術(shù)分享文檔

我只想安心的搞技術(shù),不想做管理

學習新技術(shù)時你應當掌握的『最少必要知識』

一線人員忙著學習技術(shù),二線人員忙著技術(shù)變現(xiàn)

那些會阻礙程序員成長的細節(jié)[7]

讓Redis突破內(nèi)存大小的限制

Redis圖形化客戶端管理軟件推薦

Nginx+Lua+Redis實現(xiàn)高性能緩存數(shù)據(jù)讀取

阿里云Redis開發(fā)規(guī)范

歪脖貳點零
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容