JSR-107緩存規(guī)范介紹
緩存是每一個系統(tǒng)都應該考慮的功能,它用來加速系統(tǒng)的訪問,提升系統(tǒng)的性能。
比如說一些經(jīng)常需要訪問的高頻熱點數(shù)據(jù),例如:電商網(wǎng)站的商品信息。 如果商品信息存儲在數(shù)據(jù)庫中,每次來查詢商品信息都要來查詢數(shù)據(jù)庫的話,這樣的操作耗時太大,代價也相對太大。 此時我們可以引入一個緩存中間件,將商品信息存放在緩存中,就不需要直接來查詢數(shù)據(jù)庫了。
先來查詢緩存中是否有該商品的信息,如果有就直接拿來使用;如果沒有的話,然后再去數(shù)據(jù)庫中查詢,然后再將數(shù)據(jù)放回到緩存。因為應用程序與緩存的交互是非常快的,這樣的話就可以大大減緩數(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。一個應用可以在運行期訪問多個 CachingProvider。 |
CacheManager | 緩存管理器。 定義了創(chuàng)建、配置、獲取、管理和控制多個唯一命名的 Cache,這些 Cache 存在于 CacheManager 的上下文中。一個 CacheManager 僅被一個 CachingProvider 所擁有。 |
Cache | 緩存組件。 是一個類似 Map 的數(shù)據(jù)結構并臨時存儲以 key 為索引的值。一個 Cache 僅被一個 CacheManager 所擁有。 |
Entry | 鍵值對。 是一個存儲在 Cache 中的 key-value 對。 |
Expiry | 有效期。 每一個存儲在 Cache 中的條目有一個定義的有效期。一旦超過這個時間,條目為過期的狀態(tài)。一旦過期,條目將不可訪問、更新和刪除。緩存有效期可以通過 ExpiryPolicy 設置。 |
2.應用調(diào)用緩存圖示
應用來調(diào)用緩存,首先會先調(diào)用CachingProvider(緩存提供者)
,緩存提供者管理了多個CacheManager(緩存管理器)
,緩存管理器中才真正的Cache
緩存。緩存管理器中可以管理不同類型的緩存,比如:Redis、EhCache 等。
在具體緩存組件中,我們還可以設置不同模塊的緩存,比如:Redis 中我們可以來緩存 商品信息、熱點數(shù)據(jù) 等不同模塊數(shù)據(jù),每個緩存都是Entry<K,V>
鍵值對類型。并且我們可以對緩存設置Expiry
過期時間,指定緩存存活的時間。
緩存在我們應用開發(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 緩存機制介紹
如果你還想要了解更多關于JSR-107規(guī)范相關,請移步此處學習:JSR107中文版(非官方)
到此這篇關于JSR-107緩存規(guī)范介紹的文章就介紹到這了,更多相關JSR-107緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot日志框架之Log4j2快速入門與參數(shù)詳解
本文介紹了SpringBoot日志框架log4j2的基本使用和配置方法,包括將日志輸出到控制臺、文件、Elasticsearch和Kafka,多個輸出目的地的配置,異步日志記錄器的使用以及l(fā)og4j2.xml配置文件的詳細語法和參數(shù)含義,需要的朋友可以參考下2023-05-05springboot整合spring-retry的實現(xiàn)示例
本文將結合實例代碼,介紹springboot整合spring-retry的實現(xiàn)示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06一文搞懂Runnable、Callable、Future、FutureTask及應用
一般創(chuàng)建線程只有兩種方式,一種是繼承Thread,一種是實現(xiàn)Runnable接口,在Java1.5之后就有了Callable、Future,這二種可以提供線程執(zhí)行完的結果,本文主要介紹了Runnable、Callable、Future、FutureTask及應用,感興趣的可以了解一下2023-08-08