redis — SpringBoot集成Redis Cache (三)

Spring Boot集成Redis Cache

從 Spring3 開始定義 Cache 和 CacheManager 接口來統一不同的緩存技術; Cache 接口爲緩存的組件規範定義,包含緩存的各種操作集合; Cache 接口下 Spring 提供了各種緩存的實現; 如 RedisCache,EhCacheCache ,ConcurrentMapCache 等;

1. 核心 API

  • Cache
    緩存接口,定義緩存操作。實現有:RedisCache、EhCacheCache、ConcurrentMapCache 等
  • CacheManager
    緩存管理器,管理各種緩存(cache)組件

1.1 @Cacheable

主要針對方法配置,能夠根據方法的請求參數對其進行緩存,Cacheable 執行流程:

  • 方法運行之前,按照 cacheNames 指定的名字先去查詢 Cache 緩存組件
  • 第一次獲取緩存如果沒有 Cache 組件會自動創建
  • Cache 中查找緩存的內容,使用一個 key,默認就是方法的參數
  • key 是按照某種策略生成的;默認是使用 keyGenerator 生成的,這裏使用自定義配置
  • 沒有查到緩存就調用目標方法;
  • 將目標方法返回的結果,放進緩存中

@Cacheable 註解屬性

  • cacheNames/value:指定方法返回結果使用的緩存組件的名字,可以指定多個緩存key:緩存數據使用的 keykey/keyGenerator:key 的生成器,可以自定義
  • cacheManager:指定緩存管理器
  • cacheResolver:指定緩存解析器
  • condition:指定符合條件的數據才緩存
  • unless:否定緩存;當 unless 指定的條件爲 true,方法的返回值就不會被緩存sync:是否使用異步模式

1.2 @CacheEvict

清除緩存

  • CacheEvict:緩存清除
  • key:指定要清除的數據
  • allEntries = true:指定清除這個緩存中所有的數據
  • beforeInvocation = false:方法之前執行清除緩存,出現異常不執行
  • beforeInvocation = true:代表清除緩存操作是在方法運行之前執行,無論方法是否出現異常,緩存都清除

1.3 @CachePut

保證方法被調用,又希望結果被緩存。 與@Cacheable 區別在於是否每次都調用方法,常用於更新,寫入。
CachePut:執行方法且緩存方法執行的結果,修改了數據庫的某個數據,同時更新緩存;執行流程:

  • 先調用目標方法
  • 然後將目標方法的結果緩存起來t

1.4 @EnableCaching

開啓基於註解的緩存

1.5 keyGenerator

緩存數據時 key 生成策略

1.6 @CacheConfig

統一配置本類的緩存註解的屬性

2.項目實戰

2.1 引入依賴

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

2.2 配置Redis

在application.yml配置一下內容

spring:
  redis:
    host: 192.168.174.100
    port: 6379
    database: 0
    password:
    timeout: 1000
    jedis:
      pool:
        max-active: 200
        max-wait: -1
        max-idle: 10
        min-idle: 0
  cache:
    type: redis

2.3 啓動啓動類註解開啓 Cache

@SpringBootApplication
@EnableCaching  //開啓緩存
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }
}

2.4 實現及測試

分別對上述的註解進行測試,使用postman。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章