spring boot結合cache快取

2022-07-08 06:00:11 字數 3277 閱讀 1463

spring3.1開始引入了激動人心的快取(cache)技術,其中包含 @cacheable、@cacheput、@cacheevict主要方法

@cacheable 作用和配置方法

引數解釋

example

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少乙個

例如:@cacheable(value=」mycache」)

@cacheable(value=

key快取的 key,可以為空,如果指定要按照 spel 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

@cacheable(value=」testcache」,key=」#username」)

condition

快取的條件,可以為空,使用 spel 編寫,返回 true 或者 false,只有為 true 才進行快取

@cacheable(value=」testcache」,condition=」#username.length()>2」)

@cacheput 作用和配置方法

引數解釋

example

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少乙個

@cacheput(value=」my cache」)

key快取的 key,可以為空,如果指定要按照 spel 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

@cacheput(value=」testcache」,key=」#username」)

condition

快取的條件,可以為空,使用 spel 編寫,返回 true 或者 false,只有為 true 才進行快取

@cacheput(value=」testcache」,condition=」#username.length()>2」)

@cacheevict 作用和配置方法

引數解釋

example

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少乙個

@cacheevict(value=」my cache」)

key快取的 key,可以為空,如果指定要按照 spel 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

@cacheevict(value=」testcache」,key=」#username」)

condition

快取的條件,可以為空,使用 spel 編寫,返回 true 或者 false,只有為 true 才進行快取

@cacheevict(value=」testcache」,condition=」#username.length()>2」)

allentries

是否清空所有快取內容,預設為 false,如果指定為 true,則方法呼叫後將立即清空所有快取

@cachevict(value=」testcache」,allentries=true)

beforeinvocation

是否在方法執行前就清空,預設為 false,如果指定為 true,則在方法還沒有執行的時候就清空快取,預設情況下,如果方法執行丟擲異常,則不會清空快取

@cachevict(value=」testcache」,beforeinvocation=true)

這裡我簡單講一下我使用spring boot 結合cache快取的用法

@cacheable可以標記在乙個方法上,也可以標記在乙個類上。當標記在乙個方法上時表示該方法是支援快取的,當標記在乙個類上時則表示該類所有的方法都是支援快取的。對於乙個支援快取的方法,spring會在其被呼叫後將其返回值快取起來,以保證下次利用同樣的引數來執行該方法時可以直接從快取中獲取結果,而不需要再次執行該方法。spring在快取方法的返回值時是以鍵值對進行快取的,值就是方法的返回結果,至於鍵的話,spring又支援兩種策略,預設策略和自定義策略,需要注意的是當乙個支援快取的方法在物件內部被呼叫時是不會觸發快取功能的。@cacheable可以指定三個屬性,value、key和condition。

value:快取的名稱,在 spring 配置檔案中定義,必須指定至少乙個。如@cacheable(value=」mycache」) 或者@cacheable(value=

key:快取的 key,可以為空,如果指定要按照 spel 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合。如@cacheable(value=」testcache」,key=」#id」)

condition:快取的條件,可以為空,使用 spel 編寫,返回 true 或者 false,只有為 true 才進行快取。如@cacheable(value=」testcache」,condition=」#username.length()>2」)

如果用在springboot中,那麼一定要在springboot啟動類上加上@enablecaching註解和匯入springboot自帶的cache包

org.springframework.boot

spring-boot-starter-cache

如下:

@cacheable(value = "cache1", key = "#name")

public object get(string name)

private object geta(string name)

比如寫了乙個帶快取的方法如果第一次掉用此方法,傳了個id為abc的值,那麼spring就會把return的值給快取起來,在第二次呼叫這個方法時傳了個efg,那麼得到的值就是efg,則不會是abc。

@cacheput(value = "cache1", key = "#name")

public object updateget(string name)

如果呼叫updateget方法,那麼會先更新快取的值再把return的值快取起來,比如第一次呼叫updateget("張三"); 第二次呼叫get("李四");第三次呼叫updateget("王五"); 那麼第一次得到的值和第二次得到的值都會是張三,第三次得到的值是王五;

@cacheevict(value = "cache1", key = "#name")

public void delete(string name) {}

比如第一次呼叫updateget("張三");第二次呼叫delete("張三");第三次呼叫get("李四");那麼第一次得到的結果會是張三,第三次得到的結果是李四;因為第二次呼叫delete方法把快取給清掉了,所以第三次呼叫其實是沒有找到這個快取從而執行了geta(name) 方法了。

這些是簡單的用法,(如說的不對的地方,希望大家給指出)。

謝謝觀賞!

rabbitMQ結合spring boot使用三

在消費端,我們的消費 是執行在 容器之中的 listenercontainer springboot 給我們提供了兩個 容器 messagelistenercontainer和directmessagelistenercontainer在配置檔案中凡是以spring.rabbitmq.listene...

springboot結合oauth2實現許可權認證

1.什麼是jwt json web token jwt 是為了在網路應用環境間傳遞宣告而執行的一種基於json的開放標準 rfc 7519 該token被設計為緊湊且安全的,特別適用於分布式站點的單點登入 sso 場景。jwt的宣告一般被用來在身份提供者和服務提供者間傳遞被認證的使用者身份資訊,以便...

大數運算 附c ac題解

就是這樣一類題,兩個數字太大了直接用數字型別不太好運算,我們就直接用字串來計算。題目描述 川哥可謂是我校acm起家的鼻祖,雖然早已畢業卻特別關注這次科技節的校賽,特意囑咐,一定會a b的大數加法!輸入多行測試資料,每行包含兩個正整數a和b,a和b的範圍不會超過1000位 輸出輸出a b的結果 樣例輸...