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 中設置了緩存類型
如:spring.cache.type = redis
(2)是否在啓動類上開啓了緩存
在這裏插入圖片描述
(3)如果緩存的是對象的話,對象應該進行序列化。

(4)被直接調用的普通方法上添加註解不生效,如下:

定義方法 getValue ,並添加 註解
在這裏插入圖片描述
此時show方法中直接調用的 getValue方法
在這裏插入圖片描述
這時如果在postman中請求 /show,是不會向redis中添加緩存的,如圖:
在這裏插入圖片描述
在這裏插入圖片描述

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