【揭秘】JSR-107緩存規(guī)范:讓你的Java應(yīng)用飛起來!

緩存是每一個系統(tǒng)都應(yīng)該考慮的功能惋嚎,它用來加速系統(tǒng)的訪問杠氢,提升系統(tǒng)的性能。

比如說一些經(jīng)常需要訪問的高頻熱點數(shù)據(jù)另伍,例如:電商網(wǎng)站的商品信息鼻百。 如果商品信息存儲在數(shù)據(jù)庫中,每次來查詢商品信息都要來查詢數(shù)據(jù)庫的話摆尝,這樣的操作耗時太大温艇,代價也相對太大。 此時我們可以引入一個緩存中間件堕汞,將商品信息存放在緩存中勺爱,就不需要直接來查詢數(shù)據(jù)庫了。先來查詢緩存中是否有該商品的信息讯检,如果有就直接拿來使用琐鲁;如果沒有的話,然后再去數(shù)據(jù)庫中查詢人灼,然后再將數(shù)據(jù)放回到緩存围段。因為應(yīng)用程序與緩存的交互是非常快的投放,這樣的話就可以大大減緩數(shù)據(jù)庫的壓力奈泪。再比如:一些臨時性的數(shù)據(jù),為某個用戶的手機號發(fā)送了驗證碼,三分鐘有效段磨,過期刪除取逾。如果將這些數(shù)據(jù)存儲在數(shù)據(jù)庫中耗绿,也是非常有壓力的苹支。我們也可以將這些數(shù)據(jù)存儲在緩存中間件中。系統(tǒng)直接從緩存中獲取數(shù)據(jù)即可误阻。

緩存在系統(tǒng)中用的還是非常多的债蜜。所以為了統(tǒng)一緩存的開發(fā)規(guī)范,提升系統(tǒng)的擴展性究反。J2EE 發(fā)布了 JSR-107規(guī)范寻定。主要提供了5個接口。

什么是JSR-107

JSR是Java Specification Requests的縮寫精耐,意思是Java規(guī)范提案狼速。2012年10月26日JSR規(guī)范委員會發(fā)布了JSR 107(JCache API的首個早期草案)。JCache 規(guī)范定義了一種對Java對象臨時在內(nèi)存中進行緩存的方法卦停,包括對象的創(chuàng)建向胡、共享訪問、假脫機(spooling)惊完、失效僵芹、各JVM的一致性等,可被用于緩存JSP內(nèi)最經(jīng)常讀取的數(shù)據(jù)小槐。

Java Caching 定義了5個核心接口拇派,分別是CachingProvider、CacheManager凿跳、Cache件豌、Entry 和 Expiry。

接口 介紹
CachingProvider 緩存提供者控嗜。 定義了創(chuàng)建苟径、配置、獲取躬审、管理和控制多個 CacheManager棘街。一個應(yīng)用可以在運行期訪問多個 CachingProvider。
CacheManager 緩存管理器承边。 定義了創(chuàng)建遭殉、配置、獲取博助、管理和控制多個唯一命名的 Cache险污,這些 Cache 存在于 CacheManager 的上下文中。一個 CacheManager 僅被一個 CachingProvider 所擁有。
Cache 緩存組件蛔糯。 是一個類似 Map 的數(shù)據(jù)結(jié)構(gòu)并臨時存儲以 key 為索引的值拯腮。一個 Cache 僅被一個 CacheManager 所擁有。
Entry 鍵值對蚁飒。 是一個存儲在 Cache 中的 key-value 對动壤。
Expiry 有效期。 每一個存儲在 Cache 中的條目有一個定義的有效期淮逻。一旦超過這個時間琼懊,條目為過期的狀態(tài)。一旦過期爬早,條目將不可訪問哼丈、更新和刪除。緩存有效期可以通過 ExpiryPolicy 設(shè)置筛严。

應(yīng)用調(diào)用緩存圖示

應(yīng)用來調(diào)用緩存醉旦,首先會先調(diào)用CachingProvider(緩存提供者),緩存提供者管理了多個CacheManager(緩存管理器)桨啃,緩存管理器中才真正的Cache緩存车胡。緩存管理器中可以管理不同類型的緩存,比如:Redis优幸、EhCache 等吨拍。

在具體緩存組件中,我們還可以設(shè)置不同模塊的緩存网杆,比如:Redis 中我們可以來緩存 商品信息羹饰、熱點數(shù)據(jù) 等不同模塊數(shù)據(jù),每個緩存都是Entry<K,V>鍵值對類型碳却。并且我們可以對緩存設(shè)置Expiry過期時間队秩,指定緩存存活的時間。

緩存在我們應(yīng)用開發(fā)中的調(diào)用步驟昼浦,如下圖所示:

image.png

JSR-107規(guī)范使用

在項目中使用 JSR-107規(guī)范馍资,首先需要導(dǎo)入 Maven 依賴:

<dependency> 
    <groupId>javax.cache</groupId>
    <artifactId>cache-api</artifactId>
</dependency>

該包下提供了 CachingProvider 接口,我們可以通過 getCacheManager()方式來獲取 CacheManager关噪。 CacheManger 通過 createCache()鸟蟹、getCache() 方法來直接獲取到緩存Cache,緩存的具體增刪改查操作使兔,就在 Cache 組件中建钥。

總結(jié)

JSR-107 作為一個 Java 規(guī)范,它定義的都是一些接口虐沥,類似于 JDBC 規(guī)范熊经。它的好處在于:我們直接面向接口編程泽艘,需要用到哪種緩存的實現(xiàn),我們來直接引入該緩存實現(xiàn)即可镐依,系統(tǒng)就能運行起來匹涮。 然而:并不是市面上所有的緩存組件都提供了 JSR-107 規(guī)范的實現(xiàn)。如果我們選擇的緩存中間件沒有實現(xiàn) JSR-107 規(guī)范接口槐壳,那么就需要自己來實現(xiàn)咯然低。整個過程 API 開發(fā)也比較麻煩,所以 JSR-107 規(guī)范在我們的日常開發(fā)中用的還是比較少宏粤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚翘,一起剝皮案震驚了整個濱河市灼卢,隨后出現(xiàn)的幾起案子绍哎,更是在濱河造成了極大的恐慌,老刑警劉巖鞋真,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崇堰,死亡現(xiàn)場離奇詭異,居然都是意外死亡涩咖,警方通過查閱死者的電腦和手機海诲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來檩互,“玉大人特幔,你說我怎么就攤上這事≌⒆颍” “怎么了蚯斯?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饵较。 經(jīng)常有香客問我拍嵌,道長,這世上最難降的妖魔是什么循诉? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任横辆,我火速辦了婚禮,結(jié)果婚禮上茄猫,老公的妹妹穿的比我還像新娘狈蚤。我一直安慰自己,他們只是感情好划纽,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布脆侮。 她就那樣靜靜地躺著,像睡著了一般阿浓。 火紅的嫁衣襯著肌膚如雪他嚷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音筋蓖,去河邊找鬼卸耘。 笑死,一個胖子當著我的面吹牛粘咖,可吹牛的內(nèi)容都是我干的蚣抗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓮下,長吁一口氣:“原來是場噩夢啊……” “哼翰铡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讽坏,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤锭魔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后路呜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迷捧,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年胀葱,在試婚紗的時候發(fā)現(xiàn)自己被綠了漠秋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抵屿,死狀恐怖庆锦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轧葛,我是刑警寧澤搂抒,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站朝群,受9級特大地震影響燕耿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姜胖,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一誉帅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧右莱,春花似錦蚜锨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晨抡,卻和暖如春氛悬,著一層夾襖步出監(jiān)牢的瞬間则剃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工如捅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棍现,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓镜遣,卻偏偏與公主長得像己肮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悲关,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容