2018-12-13 Redisson項(xiàng)目介紹

Redisson項(xiàng)目介紹

Rui Gu edited this page <relative-time datetime="2018-05-23T22:07:43Z" title="May 24, 2018, 6:07 AM GMT+8" style="box-sizing: border-box;">on May 24</relative-time> · 18 revisions

image

Redisson項(xiàng)目介紹

Redisson是架設(shè)在Redis基礎(chǔ)上的一個(gè)Java駐內(nèi)存數(shù)據(jù)網(wǎng)格(In-Memory Data Grid)。充分的利用了Redis鍵值數(shù)據(jù)庫提供的一系列優(yōu)勢,基于Java實(shí)用工具包中常用接口,為使用者提供了一系列具有分布式特性的常用工具類。使得原本作為協(xié)調(diào)單機(jī)多線程并發(fā)程序的工具包獲得了協(xié)調(diào)分布式多機(jī)多線程并發(fā)系統(tǒng)的能力,大大降低了設(shè)計(jì)和研發(fā)大規(guī)模分布式系統(tǒng)的難度。同時(shí)結(jié)合各富特色的分布式服務(wù),更進(jìn)一步簡化了分布式環(huán)境中程序相互之間的協(xié)作。

Redisson采用了基于NIO的Netty框架,不僅能作為Redis底層驅(qū)動客戶端,具備提供對Redis各種組態(tài)形式的連接功能,對Redis命令能以同步發(fā)送、異步形式發(fā)送、異步流形式發(fā)送管道形式發(fā)送的功能,LUA腳本執(zhí)行處理,以及處理返回結(jié)果的功能,還在此基礎(chǔ)上融入了更高級的應(yīng)用方案,不但將原生的Redis HashList,SetStringGeo,HyperLogLog等數(shù)據(jù)結(jié)構(gòu)封裝為Java里大家最熟悉的映射(Map)列表(List),集(Set)通用對象桶(Object Bucket),地理空間對象桶(Geospatial Bucket),基數(shù)估計(jì)算法(HyperLogLog)等結(jié)構(gòu),在這基礎(chǔ)上還提供了分布式的多值映射(Multimap),本地緩存映射(LocalCachedMap)有序集(SortedSet),計(jì)分排序集(ScoredSortedSet),字典排序集(LexSortedSet)列隊(duì)(Queue),阻塞隊(duì)列(Blocking Queue)有界阻塞列隊(duì)(Bounded Blocking Queue),雙端隊(duì)列(Deque),阻塞雙端列隊(duì)(Blocking Deque),阻塞公平列隊(duì)(Blocking Fair Queue),延遲列隊(duì)(Delayed Queue),布隆過濾器(Bloom Filter),原子整長形(AtomicLong),原子雙精度浮點(diǎn)數(shù)(AtomicDouble)BitSet等Redis原本沒有的分布式數(shù)據(jù)結(jié)構(gòu)。不僅如此,Redisson還實(shí)現(xiàn)了Redis文檔中提到像分布式鎖Lock這樣的更高階應(yīng)用場景。事實(shí)上Redisson并沒有不止步于此,在分布式鎖的基礎(chǔ)上還提供了聯(lián)鎖(MultiLock),讀寫鎖(ReadWriteLock),公平鎖(Fair Lock),紅鎖(RedLock),信號量(Semaphore)可過期性信號量(PermitExpirableSemaphore)閉鎖(CountDownLatch)這些實(shí)際當(dāng)中對多線程高并發(fā)應(yīng)用至關(guān)重要的基本部件。正是通過實(shí)現(xiàn)基于Redis的高階應(yīng)用方案,使Redisson成為構(gòu)建分布式系統(tǒng)的重要工具。

在提供這些工具的過程當(dāng)中,Redisson廣泛的使用了承載于Redis訂閱發(fā)布功能之上的分布式話題(Topic)功能。使得即便是在復(fù)雜的分布式環(huán)境下,Redisson的各個(gè)實(shí)例仍然具有能夠保持相互溝通的能力。在以這為前提下,結(jié)合了自身獨(dú)有的功能完善的分布式工具,Redisson進(jìn)而提供了像分布式遠(yuǎn)程服務(wù)(Remote Service),分布式執(zhí)行服務(wù)(Executor Service)分布式調(diào)度任務(wù)服務(wù)(Scheduler Service)這樣適用于不同場景的分布式服務(wù)。使得Redisson成為了一個(gè)基于Redis的Java中間件(Middleware)

Redisson Node的出現(xiàn)作為駐內(nèi)存數(shù)據(jù)網(wǎng)格的重要特性之一,使Redisson能夠獨(dú)立作為一個(gè)任務(wù)處理節(jié)點(diǎn),以系統(tǒng)服務(wù)的方式運(yùn)行并自動加入Redisson集群,具備集群節(jié)點(diǎn)彈性增減的能力。然而在真正意義上讓Redisson發(fā)展成為一個(gè)完整的駐內(nèi)存數(shù)據(jù)網(wǎng)格的,還是具有將基本上任何復(fù)雜、多維結(jié)構(gòu)的對象都能變?yōu)榉植际綄ο蟮?a target="_blank" rel="nofollow">分布式實(shí)時(shí)對象服務(wù)(Live Object Service),以及與之相結(jié)合的,在分布式環(huán)境中支持跨節(jié)點(diǎn)對象引用(Distributed Object Reference)的功能。這些特色功能使Redisson具備了在分布式環(huán)境中,為Java程序提供了堆外空間(Off-Heap Memory)儲存對象的能力。

Redisson提供了使用Redis的最簡單和最便捷的方法。Redisson的宗旨是促進(jìn)使用者對Redis的關(guān)注分離(Separation of Concern),從而讓使用者能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上。如果您現(xiàn)在正在使用其他的Redis的Java客戶端,希望Redis命令和Redisson對象匹配列表 能夠幫助您輕松的將現(xiàn)有代碼遷徙到Redisson里來。如果目前Redis的應(yīng)用場景還僅限于作為緩存使用,您也可以將Redisson輕松的整合到像SpringHibernate這樣的常用框架里。除此外您也可以間接的通過Java緩存標(biāo)準(zhǔn)規(guī)范JCache API (JSR-107)接口來使用Redisson。

Redisson生而具有的高性能,分布式特性和豐富的結(jié)構(gòu)等特點(diǎn)恰巧與Tomcat這類服務(wù)程序?qū)捁芾砥鳎⊿ession Manager)的要求相吻合。利用這樣的特點(diǎn),Redisson專門為Tomcat提供了會話管理器(Tomcat Session Manager)

在此不難看出,Redisson同其他Redis Java客戶端有著很大的區(qū)別,相比之下其他客戶端提供的功能還僅僅停留在作為數(shù)據(jù)庫驅(qū)動層面上,比如僅針對Redis提供連接方式,發(fā)送命令和處理返回結(jié)果等。像上面這些高層次的應(yīng)用則只能依靠使用者自行實(shí)現(xiàn)。

Redisson支持Redis 2.8以上版本,支持Java1.6+以上版本。

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

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

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