摘要:注解從版開始,的緩存抽象完全支持標準注解和以及和。使用方法調用的結果更新緩存,要求將其作為使用注解的參數傳遞給它由于這種差異,允許在實際方法調用之前或之后更新緩存。非常相似,當方法調用導致異常時,支持條件驅逐。
JCache(JSR-107)注解
從4.1版開始,Spring的緩存抽象完全支持JCache標準注解:@CacheResult、@CachePut、@CacheRemove和@CacheRemoveAll以及@CacheDefaults、@CacheKey和@CacheValue。即使不將緩存存儲庫遷移到JSR-107,也可以使用這些注解,內部實現使用Spring的緩存抽象,并提供符合規范的默認CacheResolver和KeyGenerator實現。換句話說,如果你已經在使用Spring的緩存抽象,則可以切換到這些標準注解,而無需更改緩存存儲(或配置,就此而言)。
特性摘要對于那些熟悉Spring的緩存注解的,下表描述了Spring注解與JSR-107版本之間的主要區別:
Spring | JSR-107 | 備注 |
---|---|---|
@Cacheable | @CacheResult | 非常相似,@CacheResult可以緩存特定的異常并強制執行該方法,而不管緩存的內容如何。 |
@CachePut | @CachePut | Spring使用方法調用的結果更新緩存,JCache要求將其作為使用@CacheValue注解的參數傳遞給它; 由于這種差異,JCache允許在實際方法調用之前或之后更新緩存。 |
@CacheEvict | @CacheRemove | 非常相似,當方法調用導致異常時,@CacheRemove支持條件驅逐。 |
@CacheEvict(allEntries=true) | @CacheRemoveAll | 請參閱@CacheRemove |
@CacheConfig | @CacheDefaults | 允許你以類似的方式配置相同的概念。 |
JCache有javax.cache.annotation.CacheResolver的概念,它與Spring的CacheResolver接口相同,只是JCache只支持一個緩存。默認情況下,簡單的實現根據注解上聲明的名稱檢索要使用的緩存,應該注意的是,如果在注解上沒有指定緩存名稱,則會自動生成默認值,有關更多信息,請參閱@CacheResult#cacheName()的javadoc。
CacheResolver實例由CacheResolverFactory檢索,可以為每個緩存操作自定義工廠,如以下示例所示:
@CacheResult(cacheNames="books", cacheResolverFactory=MyCacheResolverFactory.class) public Book findBook(ISBN isbn)
對于所有引用的類,Spring嘗試查找具有給定類型的bean,如果存在多個匹配項,則會創建一個新實例,并且可以使用常規bean生命周期回調,例如依賴項注入。
鍵由javax.cache.annotation.CacheKeyGenerator生成,其作用與Spring的KeyGenerator相同,默認情況下,除非至少有一個參數使用@CacheKey注解,否則將考慮所有方法參數,這類似于Spring的自定義鍵生成聲明,例如,以下是相同的操作,一個使用Spring的抽象,另一個使用JCache:
@Cacheable(cacheNames="books", key="#isbn") public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed) @CacheResult(cacheName="books") public Book findBook(@CacheKey ISBN isbn, boolean checkWarehouse, boolean includeUsed)
你還可以在操作上指定CacheKeyResolver,類似于指定CacheResolverFactory的方式。
JCache可以管理帶注解的方法拋出的異常,這可以防止更新緩存,但它也可以將異常緩存為失敗的指示器,而不是再次調用該方法。假設如果ISBN的結構無效,則拋出InvalidIsbnNotFoundException,這是一個永久性的失敗(用這樣的參數無法檢索到書籍),下面緩存異常,以便使用相同的無效ISBN進一步調用直接拋出緩存的異常,而不是再次調用該方法:
@CacheResult(cacheName="books", exceptionCacheName="failures" cachedExceptions = InvalidIsbnNotFoundException.class) public Book findBook(ISBN isbn)啟用JSR-107支持
除了Spring的聲明性注解支持之外,你無需執行任何特定的操作來啟用JSR-107支持,如果JSR-107 API和spring-context-support模塊都存在于類路徑中,則@EnableCaching和cache:annotation-driven元素都會自動啟用JCache支持。
根據你的用例,選擇基本上是你自己的,你甚至可以在某些服務上使用JSR-107 API并在其他服務上使用Spring自己的注解來混合和匹配服務。但是,如果這些服務影響相同的緩存,則應使用一致且相同的鍵生成實現。上一篇:聲明式基于注解的緩存
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76180.html
摘要:前言如題,今天介紹的數據緩存。說明確實做了數據緩存,第二次的測試結果是從數據緩存中獲取的,并沒有直接查數據庫。為為的數據做了緩存插入數據返回的結果數據庫中的結果訪問結果如下圖。后語以上為數據緩存的教程。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 的數據緩存。做過開發的都知道程序的瓶頸在于數據庫,我們也知道內...
摘要:是由阿里巴巴開源的通用緩存訪問框架,如果你對很熟悉的話,請一定花一點時間了解一下,它更好用。有了,我們就可以更方便的基于統一的接口訪問緩存。 JetCache是由阿里巴巴開源的通用緩存訪問框架,如果你對Spring Cache很熟悉的話,請一定花一點時間了解一下JetCache,它更好用。 JetCache提供的核心能力包括: 提供統一的,類似jsr-107風格的API訪問Cache...
閱讀 970·2023-04-25 23:55
閱讀 2691·2023-04-25 14:13
閱讀 3286·2019-08-26 13:47
閱讀 2957·2019-08-23 18:16
閱讀 618·2019-08-23 17:20
閱讀 3217·2019-08-23 16:55
閱讀 3136·2019-08-22 15:39
閱讀 3184·2019-08-20 18:10