JSR-107緩存規(guī)范介紹
緩存是每一個系統(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個接口。
1.什么是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è)置。 |
2.應(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)用步驟,如下圖所示:

3.JSR-107規(guī)范使用
在項目中使用 JSR-107規(guī)范,首先需要導入 Maven 依賴:
<dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> </dependency>
該包下提供了 CachingProvider 接口,我們可以通過 getCacheManager()方式來獲取 CacheManager。 CacheManger 通過 createCache()、getCache() 方法來直接獲取到緩存Cache,緩存的具體增刪改查操作,就在 Cache 組件中。
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ā)中用的還是比較少。
4.Spring 緩存機制
既然 JSR-107 規(guī)范馬失前蹄。Spring 為了簡化項目開發(fā),便為我們提供了自己的緩存機制。Spring 緩存機制底層概念同 JSR-107 是通用的,也定義了一些借口、注解等。所以后來在開發(fā)中,使用更多的也就是 Spring 緩存機制咯。
下一篇,我們就來繼續(xù)了解 Spring 緩存機制。→→→→→點擊跳轉(zhuǎn):Spring 緩存機制介紹
如果你還想要了解更多關(guān)于JSR-107規(guī)范相關(guān),請移步此處學習:JSR107中文版(非官方)
到此這篇關(guān)于JSR-107緩存規(guī)范介紹的文章就介紹到這了,更多相關(guān)JSR-107緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice
@ControllerAdvice注解是Spring3.2中新增的注解,學名是Controller增強器,作用是給Controller控制器添加統(tǒng)一的操作或處理。對于@ControllerAdvice,我們比較熟知的用法是結(jié)合@ExceptionHandler用于全局異常的處理,但其作用不止于此2022-08-08
Java應(yīng)用多機器部署解決大量定時任務(wù)問題
這篇文章主要介紹了Java應(yīng)用多機器部署解決大量定時任務(wù)問題,兩臺服務(wù)器同時部署了同一套代碼, 代碼中寫有spring自帶的定時任務(wù),但是每次執(zhí)行定時任務(wù)時只需要一臺機器去執(zhí)行,需要的朋友可以參考下2019-07-07
spring?aop?pointcut?添加多個execution方式
這篇文章主要介紹了spring?aop?pointcut?添加多個execution方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

