SpringBoot學習小結之快取

2021-10-06 22:59:13 字數 3305 閱讀 8758

使用快取的好處有:

壞處有:

下面以springboot2.1.6.release為例,學習快取的使用

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-cacheartifactid

>

dependency

>

springboot 提供幾個註解實現快取功能, 通過aop方式實現

序號註解名含義1

@enablecaching

開啟快取註解

2@cacheable

如果能從快取拿到資料,直接用快取的

如果拿不到,執行方法,並將結果進行快取

3@cacheput

執行方法,並將結果存入快取,快取已存在則更新

4@cacheevict

預設執行方法後觸發刪除快取

5@caching

用於組合多種快取策略

6@cacheconfig

設定類級別快取通用屬性

cacheable提供以下幾個屬性更細粒度控制快取

序號屬性名含義1

value/cachenames

快取名字

2key

快取的key生成規則,spel表示式

3keygenerator

自定義key生成策略

4cachemanager

自定義快取管理器,預設concurrentmapcachemanager

5cacheresolver

自定義快取解析器, 預設******cacheresolver

6condition

快取條件,傳入引數經過condition 判斷為true快取,spel表示式

7unless

和condition類似,不過unless是在方法執行完畢後對結果進行判斷,是否加入快取, spel表示式(常用#result)

8sync

應用多執行緒環境下,多個執行緒key相同,只會有乙個執行緒對快取讀寫,其他阻塞

stringboot @cacheable key針對方法引數預設生成策略為:

key和keygenerator只能指定乙個,互斥

@enablecaching

public

class

}

@data

public

class

user

implements

serializable

@restcontroller

public

class

basecontroller

("/cacheevict"

)@cacheevict

(value =

"cache-test"

)public object cacheevict()

("/cacheput"

)@cacheput

(value =

"cache-test"

)public object cacheput()

("/testkey"

)// 將引數name和key拼接作為key

@cacheable

(value =

"cache-test"

, key =

"#name + #age"

)public object cachekey

(string name, integer age)

("/testcondition"

)// 當age > 10,將結果加入快取

@cacheable

(value =

"cache-test"

, condition =

"#age > 10"

)public object cachecondition

(string name, integer age)

("/testunless"

)// 如果方法執行結果user.age > 10就不快取

@cacheable

(value =

"cache-test"

, unless =

"#result.age > 10"

)public object cacheunless

(string name, integer age)

("/testsync"

)// 當sync = true,三個執行緒key相同,只有乙個對快取讀寫,讀寫完後其他執行緒從快取取,所以只會列印一次-----進入cachesync----

// 當sync = false時,三個執行緒key相同,判斷快取為空,同時進入方法,會列印三次-----進入cachesync----

@cacheable

(value =

"cache-test"

, sync =

true

)public object cachesync

(string name, integer age)

}

@runwith

(springrunner.

class

)@springboottest

public

class

",forentity);}

).start()

;new

thread((

)->

",forentity);}

).start()

;new

thread((

)->

",forentity);}

).start()

;try

catch

(interruptedexception e)

}}

springboot 內建對一些快取的預設支援,springboot也是按照以下順序對快取的提供者進行檢測

generic

jcache (jsr-107) (ehcache 3, hazelcast, infinispan, and others)

ehcache 2.x

hazelcast

infinispan

couchbase

redis

caffeine

******

concurrenmap

ehcache

redis

學習小結之 MFC

問題1 mfc列表框中內容不按照新增的順序顯示 解決 控制項屬性 行為 sort false l 等於cstring型別的null,不等於一般的null 控制項變數 control 代表這個控制項 value 傳值 獲取列表框當前選項的下標 從0開始 control.getcursel 讀取檔案 c...

springBoot學習之註解小記

controller responsebody restcontroller 當方法或者類上增加了 responsebody註解時,所返回的引數為json格式。當沒有此註解時,引數會以鍵值對的形式傳入。data 提供該類所有屬性的getting和setting方法。cookievalue 用來獲取c...

SpringBoot 學習之Spring篇

scope 描述的是 spring 容器如何新建 bean 的例項的。spring 的scope 有以下幾種,通過 scope 註解來實現。1 singleton 乙個 spring 容器中只有乙個 bean 的例項,此為 spring的預設配置。2 prototype 每次呼叫新建乙個 bean ...