欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成緩存功能詳解

 更新時(shí)間:2024年06月13日 15:15:53   作者:-無事小神仙-  
Java?Caching定義了五個(gè)核心接口,分別是:CachingProvider、CacheManager、Cache、Entry和Expiry,這篇文章主要介紹了SpringBoot集成緩存功能詳細(xì)過程,需要的朋友可以參考下

1. 緩存規(guī)范

Java Caching定義了五個(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:是一個(gè)儲(chǔ)存在Cache中的key-value對。
  • Expiry:每一個(gè)儲(chǔ)存在Cache中的條目有一個(gè)定義的有效期。一旦超過這個(gè)時(shí)間,條目為過期的狀態(tài)。一旦過期,條目將不可訪問、更新和刪除。緩存有效期可以通過ExpiryPolicy設(shè)置。

2. 緩存抽象

Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術(shù),并支持使用JCache(JSR-107)注解簡化開發(fā)。

  • Cache接口為緩存的組件規(guī)范定義,包含緩存的各種操作集合。
  • Cache接口下Spring提供了各種xxxCache的實(shí)現(xiàn),如RedisCache、EhcacheCache、ConcurrentMapCache等。
描述
Cache緩存接口,定義緩存操作,實(shí)現(xiàn)有RedisCache、EhcacheCache、ConcurrentMapCache等
CacheManager緩存管理器,管理各種緩存(Cache)組件
@Cacheable主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進(jìn)行緩存
@CacheEvict清空緩存
@CachePut保證方法被調(diào)用,又希望結(jié)果被緩存
@EnableCaching開啟基于注解的緩存
keyGenerator緩存數(shù)據(jù)時(shí)key的生成策略
serialize緩存數(shù)據(jù)時(shí)value的序列化策略
@Cacheing指定多個(gè)緩存策略

3. 緩存裝配

Spring Boot提供的緩存自動(dòng)配置都記錄在CacheAutoConfiguration中,其中CacheConfigurationImportSelector最為關(guān)鍵,它幫助我們導(dǎo)入常用緩存組件,組件如下:

  • org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
  • org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration

使用緩存時(shí)只需要導(dǎo)入對應(yīng)的實(shí)現(xiàn)即可,Spring Boot自動(dòng)幫我們裝配。

4. 簡單緩存

使用Spring Boot提供的基于Map的內(nèi)存級(jí)緩存

4.1 依賴管理

引入Spring Boot緩存場景啟動(dòng)器,默認(rèn)導(dǎo)入的就是SimpleCacheConfiguration配置,是基于Map的內(nèi)存級(jí)緩存

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

4.2 開啟緩存

通過@EnableCacheing注解開啟基于注解的緩存

@EnableCaching  // 開啟基于注解的緩存
@SpringBootApplication
public class SimpleCacheServiceApplication {
    public static void main(String[] args) {
        // 啟動(dòng)應(yīng)用程序
        SpringApplication.run(SimpleCacheServiceApplication.class, args);
    }
}

4.3 Cacheable

@Cacheable:先查詢緩存數(shù)據(jù),如果存在直接取出緩存數(shù)據(jù)返回,如果不存在就執(zhí)行目標(biāo)方法,將方法返回值存入緩存,常用于查詢數(shù)據(jù)。

注解屬性

屬性描述
cacheNames緩存的名字
key緩存索引,默認(rèn)使用方法參數(shù)值
keyGenerator緩存索引生成器,與key屬性二選一
cacheManager緩存管理器
condition滿足條件進(jìn)行緩存
unless滿足條件不進(jìn)行緩存
sync是否使用異步,默認(rèn)為false
@Override
@Cacheable(cacheNames = "user", key = "#userId")
public User findUserInformationByUserId(Integer userId) {
    log.info("通過用戶編號(hào)查詢用戶信息......");
    return new User(userId, "Jack", LocalDateTime.now(), true);
}

第一次調(diào)用:先查詢緩存,此時(shí)緩存中不存在數(shù)據(jù),執(zhí)行目標(biāo)方法后將目標(biāo)方法返回?cái)?shù)據(jù)存入緩存

在這里插入圖片描述

第二次調(diào)用:先查詢緩存,此時(shí)緩存存在數(shù)據(jù)不執(zhí)行目標(biāo)方法

在這里插入圖片描述

4.4 CachePut

@CachePut:每次都先執(zhí)行目標(biāo)方法,將方法返回值存入緩存,常用于添加數(shù)據(jù)和修改數(shù)據(jù)。

注解屬性

屬性描述
cacheNames緩存的名字
key緩存索引,默認(rèn)使用方法參數(shù)值
keyGenerator緩存索引生成器,與key屬性二選一
cacheManager緩存管理器
condition滿足條件進(jìn)行緩存
unless滿足條件不進(jìn)行緩存
@Override
@CachePut(cacheNames = "user", key = "#user.userId")
public Boolean insertUserInformation(User user) {
    log.info("業(yè)務(wù)層 - 添加用戶信息......");
    return true;
}

4.5 CacheEvict

@CacheEvict:在執(zhí)行目標(biāo)方法之后清除緩存,也可以指定在執(zhí)行目標(biāo)方法之前清除緩存,常用于刪除數(shù)據(jù)。

注解屬性

屬性描述
cacheNames緩存的名字
key需要清除緩存的索引,默認(rèn)使用方法參數(shù)值
keyGenerator緩存索引生成器,與key屬性二選一
cacheManager緩存管理器
condition滿足條件進(jìn)行清除緩存
allEntries是否清除全部緩存,默認(rèn)為false
beforeInvocation是否在目標(biāo)方法執(zhí)行之前清除緩存,默認(rèn)為false
@Override
@CacheEvict(cacheNames = "user", key = "#userId")
public Boolean deleteUserInformationByUserId(Integer userId) {
    log.info("業(yè)務(wù)層 - 刪除用戶信息......");
    return true;
}

4.6 Caching

@Caching:方法級(jí)注解,可以指定復(fù)雜的緩存策略。

4.7 CacheConfig

@CacheConfig:類級(jí)注解,配置該類緩存策略的一些公共屬性,比如緩存名稱、緩存管理器、緩存索引生成策略

到此這篇關(guān)于SpringBoot集成緩存功能詳解的文章就介紹到這了,更多相關(guān)SpringBoot集成緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kafka攔截器的神奇操作方法

    Kafka攔截器的神奇操作方法

    Kafka攔截器是一種強(qiáng)大的機(jī)制,用于在消息發(fā)送和接收過程中插入自定義邏輯,它們可以用于消息定制、日志記錄、監(jiān)控、業(yè)務(wù)邏輯集成、性能統(tǒng)計(jì)和異常處理等,本文介紹Kafka攔截器的神奇操作,感興趣的朋友一起看看吧
    2025-01-01
  • Java中的@Repeatable注解的作用詳解

    Java中的@Repeatable注解的作用詳解

    這篇文章主要介紹了Java中的@Repeatable注解的作用詳解,@Repeatable注解是用來標(biāo)注一個(gè)注解在同一個(gè)地方可重復(fù)使用的一個(gè)注解,使被他注釋的注解可以在同一個(gè)地方重復(fù)使用,需要的朋友可以參考下
    2024-01-01
  • SpringCloud Gateway中斷言路由和過濾器的使用詳解

    SpringCloud Gateway中斷言路由和過濾器的使用詳解

    這篇文章主要介紹了SpringCloud Gateway中斷言路由和過濾器的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java實(shí)現(xiàn)批量合并Excel工作表

    Java實(shí)現(xiàn)批量合并Excel工作表

    這篇文章主要為大家詳細(xì)介紹了如何使用Java快速實(shí)現(xiàn)批量Excel工作表的合并,文中的示例代碼代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解

    Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解

    這篇文章主要介紹了Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解,通常我們會(huì)提供一個(gè)模板,此模塊我們可以使用easyExcel導(dǎo)出數(shù)據(jù)生成的一個(gè)Excel文件當(dāng)作模板,提供下載鏈接,用戶在該文件內(nèi)填入規(guī)定的數(shù)據(jù)格式以后可以批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫中,需要的朋友可以參考下
    2023-08-08
  • Java利用Request請求如何獲取IP地址對應(yīng)的省份、城市詳解

    Java利用Request請求如何獲取IP地址對應(yīng)的省份、城市詳解

    之前已經(jīng)給大家介紹了關(guān)于Java用Request請求獲取IP地址的相關(guān)內(nèi)容,那么下面這篇文章將給大家進(jìn)入深入的介紹,關(guān)于Java利用Request請求如何獲取IP地址對應(yīng)省份、城市的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Mybatis加載策略的實(shí)現(xiàn)方法

    Mybatis加載策略的實(shí)現(xiàn)方法

    Mybatis中一對一,一對多,多對多關(guān)系的配置及實(shí)現(xiàn),可以實(shí)現(xiàn)對象的關(guān)聯(lián)查詢。實(shí)際開發(fā)過程中很多時(shí)候我們并不需要總是在加載用戶信息時(shí)就一定要加載他的訂單信息,這是就是我們常說的延時(shí)加載,本文給大家詳細(xì)介紹實(shí)現(xiàn)方法,一起看看吧
    2022-02-02
  • Java操作redis實(shí)現(xiàn)增刪查改功能的方法示例

    Java操作redis實(shí)現(xiàn)增刪查改功能的方法示例

    這篇文章主要介紹了Java操作redis實(shí)現(xiàn)增刪查改功能的方法,涉及java操作redis數(shù)據(jù)庫的連接、設(shè)置、增刪改查、釋放資源等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Java判斷線程池線程是否執(zhí)行完畢

    Java判斷線程池線程是否執(zhí)行完畢

    這篇文章主要介紹了Java判斷線程池線程是否執(zhí)行完畢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • @ConfigurationProperties遇到的坑及解決

    @ConfigurationProperties遇到的坑及解決

    這篇文章主要介紹了解決@ConfigurationProperties遇到的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論