JSR-107緩存規(guī)范介紹
緩存是每一個(gè)系統(tǒng)都應(yīng)該考慮的功能,它用來加速系統(tǒng)的訪問,提升系統(tǒng)的性能。 比如說一些經(jīng)常需要訪問的高頻熱點(diǎn)數(shù)據(jù),例如:電商網(wǎng)站的商品信息。 如果商品信息存儲(chǔ)在數(shù)據(jù)庫中,每次來查詢商品信息都要來查詢數(shù)據(jù)庫的話,這樣的操作耗時(shí)太大,代價(jià)也相對(duì)太大。 此時(shí)我們可以引入一個(gè)緩存中間件,將商品信息存放在緩存中,就不需要直接來查詢數(shù)據(jù)庫了。 先來查詢緩存中是否有該商品的信息,如果有就直接拿來使用;如果沒有的話,然后再去數(shù)據(jù)庫中查詢,然后再將數(shù)據(jù)放回到緩存。因?yàn)閼?yīng)用程序與緩存的交互是非??斓模@樣的話就可以大大減緩數(shù)據(jù)庫的壓力。
再比如:一些臨時(shí)性的數(shù)據(jù),為某個(gè)用戶的手機(jī)號(hào)發(fā)送了驗(yàn)證碼,三分鐘有效,過期刪除。如果將這些數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,也是非常有壓力的。我們也可以將這些數(shù)據(jù)存儲(chǔ)在緩存中間件中。系統(tǒng)直接從緩存中獲取數(shù)據(jù)即可。
緩存在系統(tǒng)中用的還是非常多的。所以為了統(tǒng)一緩存的開發(fā)規(guī)范,提升系統(tǒng)的擴(kuò)展性。J2EE 發(fā)布了 JSR-107規(guī)范。主要提供了5個(gè)接口。
1.什么是JSR-107
JSR是Java Specification Requests的縮寫,意思是Java 規(guī)范提案。2012年10月26日J(rèn)SR規(guī)范委員會(huì)發(fā)布了JSR 107(JCache API的首個(gè)早期草案)。JCache 規(guī)范定義了一種對(duì)Java對(duì)象臨時(shí)在內(nèi)存中進(jìn)行緩存的方法,包括對(duì)象的創(chuàng)建、共享訪問、假脫機(jī)(spooling)、失效、各JVM的一致性等,可被用于緩存JSP內(nèi)最經(jīng)常讀取的數(shù)據(jù)。
Java Caching 定義了5個(gè)核心接口,分別是CachingProvider、CacheManager、Cache、Entry 和 Expiry。
| 接口 | 介紹 |
|---|---|
CachingProvider | 緩存提供者。 定義了創(chuàng)建、配置、獲取、管理和控制多個(gè) CacheManager。一個(gè)應(yīng)用可以在運(yùn)行期訪問多個(gè) CachingProvider。 |
CacheManager | 緩存管理器。 定義了創(chuàng)建、配置、獲取、管理和控制多個(gè)唯一命名的 Cache,這些 Cache 存在于 CacheManager 的上下文中。一個(gè) CacheManager 僅被一個(gè) CachingProvider 所擁有。 |
Cache | 緩存組件。 是一個(gè)類似 Map 的數(shù)據(jù)結(jié)構(gòu)并臨時(shí)存儲(chǔ)以 key 為索引的值。一個(gè) Cache 僅被一個(gè) CacheManager 所擁有。 |
Entry | 鍵值對(duì)。 是一個(gè)存儲(chǔ)在 Cache 中的 key-value 對(duì)。 |
Expiry | 有效期。 每一個(gè)存儲(chǔ)在 Cache 中的條目有一個(gè)定義的有效期。一旦超過這個(gè)時(shí)間,條目為過期的狀態(tài)。一旦過期,條目將不可訪問、更新和刪除。緩存有效期可以通過 ExpiryPolicy 設(shè)置。 |
2.應(yīng)用調(diào)用緩存圖示
應(yīng)用來調(diào)用緩存,首先會(huì)先調(diào)用CachingProvider(緩存提供者),緩存提供者管理了多個(gè)CacheManager(緩存管理器),緩存管理器中才真正的Cache緩存。緩存管理器中可以管理不同類型的緩存,比如:Redis、EhCache 等。
在具體緩存組件中,我們還可以設(shè)置不同模塊的緩存,比如:Redis 中我們可以來緩存 商品信息、熱點(diǎn)數(shù)據(jù) 等不同模塊數(shù)據(jù),每個(gè)緩存都是Entry<K,V>鍵值對(duì)類型。并且我們可以對(duì)緩存設(shè)置Expiry過期時(shí)間,指定緩存存活的時(shí)間。
緩存在我們應(yīng)用開發(fā)中的調(diào)用步驟,如下圖所示:

3.JSR-107規(guī)范使用
在項(xiàng)目中使用 JSR-107規(guī)范,首先需要導(dǎo)入 Maven 依賴:
<dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> </dependency>
該包下提供了 CachingProvider 接口,我們可以通過 getCacheManager()方式來獲取 CacheManager。 CacheManger 通過 createCache()、getCache() 方法來直接獲取到緩存Cache,緩存的具體增刪改查操作,就在 Cache 組件中。
JSR-107 作為一個(gè) Java 規(guī)范,它定義的都是一些接口,類似于 JDBC 規(guī)范。它的好處在于:我們直接面向接口編程,需要用到哪種緩存的實(shí)現(xiàn),我們來直接引入該緩存實(shí)現(xiàn)即可,系統(tǒng)就能運(yùn)行起來。 然而:并不是市面上所有的緩存組件都提供了 JSR-107 規(guī)范的實(shí)現(xiàn)。如果我們選擇的緩存中間件沒有實(shí)現(xiàn) JSR-107 規(guī)范接口,那么就需要自己來實(shí)現(xiàn)咯。整個(gè)過程 API 開發(fā)也比較麻煩,所以 JSR-107 規(guī)范在我們的日常開發(fā)中用的還是比較少。
4.Spring 緩存機(jī)制
既然 JSR-107 規(guī)范馬失前蹄。Spring 為了簡化項(xiàng)目開發(fā),便為我們提供了自己的緩存機(jī)制。Spring 緩存機(jī)制底層概念同 JSR-107 是通用的,也定義了一些借口、注解等。所以后來在開發(fā)中,使用更多的也就是 Spring 緩存機(jī)制咯。
下一篇,我們就來繼續(xù)了解 Spring 緩存機(jī)制。→→→→→點(diǎn)擊跳轉(zhuǎn):Spring 緩存機(jī)制介紹
如果你還想要了解更多關(guān)于JSR-107規(guī)范相關(guān),請(qǐng)移步此處學(xué)習(xí):JSR107中文版(非官方)
到此這篇關(guān)于JSR-107緩存規(guī)范介紹的文章就介紹到這了,更多相關(guān)JSR-107緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice
@ControllerAdvice注解是Spring3.2中新增的注解,學(xué)名是Controller增強(qiáng)器,作用是給Controller控制器添加統(tǒng)一的操作或處理。對(duì)于@ControllerAdvice,我們比較熟知的用法是結(jié)合@ExceptionHandler用于全局異常的處理,但其作用不止于此2022-08-08
Java實(shí)現(xiàn)文件圖片的預(yù)覽和下載功能
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)文件圖片的預(yù)覽和下載功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
@Scheduled 如何讀取動(dòng)態(tài)配置文件
這篇文章主要介紹了@Scheduled 如何讀取動(dòng)態(tài)配置文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java應(yīng)用多機(jī)器部署解決大量定時(shí)任務(wù)問題
這篇文章主要介紹了Java應(yīng)用多機(jī)器部署解決大量定時(shí)任務(wù)問題,兩臺(tái)服務(wù)器同時(shí)部署了同一套代碼, 代碼中寫有spring自帶的定時(shí)任務(wù),但是每次執(zhí)行定時(shí)任務(wù)時(shí)只需要一臺(tái)機(jī)器去執(zhí)行,需要的朋友可以參考下2019-07-07
spring?aop?pointcut?添加多個(gè)execution方式
這篇文章主要介紹了spring?aop?pointcut?添加多個(gè)execution方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

