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。