SpringCache的使用,快取解決方案

2021-10-25 17:41:47 字數 3061 閱讀 3532

官網:

# cache

org.springframework.boot

spring-boot-starter-cache

# 如果想要使用redis的快取,再引入redis

org.springframework.boot

spring-boot-starter-data-redis

自動配置了哪些呢?

cacheautoconfiguration會匯入rediscacheconfiguration

rediscacheconfiguration為我們自動配置好了rediscachemanager

我們需要的配置

# 配置使用redis作為快取

spring.cache.type=redis

測試前,一定要先開啟快取功能 @enablecacheing

/**

* 表示當前結果需要被快取,如果快取中有,就不會呼叫,如果快取中沒有,就會呼叫方法,將方法的結果放入快取

* 注意:每乙個需要快取的資料我們都來指定要放到哪個名字的快取【快取的分割槽(按照業務型別分)】

* @return

*/@cacheable()

@override

public list

getlevel1categories()

測試結果

自定義操作

//指定快取的key,並在配置檔案中設定了過期時間

@cacheable

(value =

,key =

"'level1category'"

)@override

public list

getlevel1categories()

//經測試:現在鍵的名字變成了 category::level1category,過期時間為3600s

//這裡的key也可以使用spel表示式, 例如:#root.method.name 獲取方法的名字

//spel表示式的語法參照: -spel-context 的8.2.1章節

自定義序列規則

之前預設的式jdk序列化

cacheautoconfiguration -->rediscacheconfiguration–>自動配置了rediscachemanager—>初始化所有的快取—>每個快取決定使用什麼配置—>如果rediscacheconfiguration有就用已有的,沒有就用預設的---->想改快取的配置,只需要給容器中放乙個rediscacheconfiguration即可—>就會應用到當前rediscachemanager管理的所有快取中

/**

* 配置key的序列化器以及值的序列化器

*/@enablecaching

//開啟快取功能

@configuration

public

class

mycacheconfig

}

發現新的問題,使用了我們的自定義配置後,我們之前配置類中配置的ttl時間不生效了

# spring.cache的常用配置

spring:

cache:

type: redis

redis:

time-to-live: 3600000 # 指定過期時間

key-prefix: chche_ # 如果指定了字首,如果沒有就預設使用快取得名字作為字首

use-key-prefix: true

# 是否使用字首

cache-null-values: true

# 是否快取空值,解決快取穿透問題

@cacheevict

當有更新操作時,需要刪除多個快取的時候

// 第一種方式

@caching

(evict =

)//第二種方式,刪除category分割槽下的所有快取

@cacheevict

(value =

"category"

,allentries =

true

)

儲存同乙個型別的資料,都可以指定成同乙個分割槽,就像這裡的category,分割槽名預設就是快取的字首

@cacheput

當有更新操作時,返回的資料正好也是最新的資料,也就是雙寫模式

spring-cache的不足

讀模式

查詢乙個null資料。解決:快取空物件 cache-null-values: true

大量併發進來同時查詢乙個正好過期的資料。解決:加鎖 ?? @cacheable(async = true) 加鎖 解決擊穿

大量的key同時過期。解決:加隨機時間。加上過期時間

寫模式(快取與資料庫一致)

總結:常規資料(讀多寫少,及時性一致性要求不高的資料),完全可以使用springcache,寫模式,只要有過期時間就足夠了。特殊資料:特殊設計

衝衝衝!!!

spring cache簡單使用

spring從3.1起自帶了cache功能。可以快取乙個方法的返回值,也就是說如果有快取,spring就會直接使用快取值,而不會再去執行這個方法 cashe相關的功能是在spring context.4.2.5.release.jar這個jar包中的。然後,開啟cache註解,配置cachemana...

使用springCache快取的步驟

org.springframework.cache.concurrent.concurrentmapcachemanager加入ioc容器,用 cachemanager會報錯.spring專案因為沒有concurrentmapcachemanage快取報錯,網上我一般沒看到有文章會說明。在配置類上加...

Spring Cache抽象 使用SpEL表示式

在spring cache註解屬性中 比如key,condition和unless spring的快取抽象使用了spel表示式,從而提供了屬性值的動態生成及足夠的靈活性。下面的 根據使用者的usercode進行快取,對於key屬性,使用了表示式自定義鍵的生成。public class userser...