Springboot 中緩存的使用
一。說明
1.springboot 中的緩存遵循 JSR107 規範。
2.spring 中 從 3.1 版本開始,實現了 JSR107規範,進行了緩存的抽象。
3.springboot 中提供了幾個方便的註解用來處理緩存,如@Cacheable ,@CacheEvict等。
4.如果不設置緩存類型,默認情況下,會緩存到 JVM中 ,以ConcurrentHashMap 的方式進行緩存。
5.springboot中使用緩存,不引入 spring-boot-starter-cache依賴也可以正常使用。
二。springboot中使用緩存(redis)
1.引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
2.在 application.yml 中指定 緩存方式
如果是多環境的話,可以在 application.yml 中指定
spring:
cache:
type: redis
3.在 application.yml 中指定 redis 連接信息
如果是多環境的話,可以在 application-dev.yml 中指定
spring:
redis:
host: 127.0.0.1
port: 6379
password: my_password_123456
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 500
min-idle: 0
lettuce:
shutdown-timeout: 0
database: 1
4.在啓動類上開啓緩存
@EnableCaching
5.註解的使用
說明
實際在使用業務緩存的時候,key的形式一般是 緩存前綴+業務id。緩存前綴用來表示是哪類業務,而id 表示是哪個業務數據。這種分類存儲的方式使整體存儲的數據結構更清晰。比如 student::2001,表示學號爲1的學生;employee::6001,表示工號爲 6001 的員工。
cacheNames 的值實際上就是緩存前綴,key 的值就是 業務id。
1.讀取緩存
@Cacheable
如果緩存不存在,則先執行一遍查詢數據的邏輯,然後添加到緩存
2.更新緩存
@CachePut
注意:更新的緩存的值,是return的值,所以,即使是insert/update操作,在最後也要return。
3.刪除緩存
@CacheEvict
注意:beforeInvocation 參數 表示 是否在執行方法的方法體之前刪除緩存,beforeInvocation = true 表示是在執行方法體之前刪除緩存。
三。緩存不生效問題的解決
如果設置了緩存,但是緩存不生效。可以檢查以下幾個地方:
(1)是否在 application.yml 中設置了緩存類型
(2)是否在啓動類上開啓了緩存
(3)如果緩存的是對象的話,對象應該進行序列化。
(4)被直接調用的普通方法上添加註解不生效,如下:
定義方法 getValue ,並添加 註解
此時show方法中直接調用的 getValue方法
這時如果在postman中請求 /show,是不會向redis中添加緩存的,如圖: