Springboot cache快取原始碼解析

2021-10-03 05:39:36 字數 4195 閱讀 3579

key() 指定快取的key的值,不指定預設使用方法引數的值

@cacheput 在目標方法之後呼叫,將返回結果新增到快取中

@cacheable 首先查詢快取,生成keygenerator()

@cacheevict 刪除快取,可以設定在呼叫方法前後執行

以上3個方法一般都加在service層的黨法上

快取服務模擬其他服務應該是配置在乙個自動配置類中cacheautoconfiguration中,我們點進這個類

@configuration

@conditionalonclass

(cachemanager.

class

)@conditionalonbean

(cacheaspectsupport.

class

)@conditionalo****singbean

(value = cachemanager.

class

, name =

"cacheresolver"

)@enableconfigurationproperties

(cacheproperties.

class

)@autoconfigureafter()

//這裡向容器中注入了乙個元件,我們點進這個元件cacheconfigurationimportselector

@import

(cacheconfigurationimportselector.

class

)public

class

cacheautoconfiguration

//這裡打個斷點

return imports;

/**imports =

* 0 = "org.springframework.boot.autoconfigure.cache.genericcacheconfiguration"

* 1 = "org.springframework.boot.autoconfigure.cache.jcachecacheconfiguration"

* 2 = "org.springframework.boot.autoconfigure.cache.ehcachecacheconfiguration"

* 3 = "org.springframework.boot.autoconfigure.cache.hazelcastcacheconfiguration"

* 4 = "org.springframework.boot.autoconfigure.cache.infinispancacheconfiguration"

* 5 = "org.springframework.boot.autoconfigure.cache.couchbasecacheconfiguration"

* 6 = "org.springframework.boot.autoconfigure.cache.rediscacheconfiguration"

* 7 = "org.springframework.boot.autoconfigure.cache.caffeinecacheconfiguration"

* 8 = "org.springframework.boot.autoconfigure.cache.******cacheconfiguration"

* 9 = "org.springframework.boot.autoconfigure.cache.noopcacheconfiguration"

預設是只有******cacheconfiguration 這個配置類生效(debug=true)

控制台列印如下:

******cacheconfiguration matched:

- cache org.springframework.boot.autoconfigure.cache.******cacheconfiguration automatic cache type (cachecondition)

- @conditionalo****singbean (types: org.springframework.cache.cachemanager; searchstrategy: all) did not find any beans (onbeancondition)

*/}}

//點進******cacheconfiguration,這是乙個配置類

@configuration

@conditionalo****singbean

(cachemanager.

class

)@conditional

(cachecondition.

class

)class

******cacheconfiguration

return

this

.customizerinvoker.

customize

(cachemanager);}

//然後我們繼續點進concurrentmapcachemanager這個類,這個類是用來管理caches的,點進getcache()方法

@override

@nullable

public cache getcache

(string name)}}

// 最終獲取到cache並返回出去

return cache;

//concurrentmapcache是預設返回的cache型別,我們點進去看看

//在cache中,所有的快取資料都是以(k,v)型別進行儲存的,用乙個map store 屬性進行維護

public

class

concurrentmapcache

extends

abstractvalueadaptingcache

// 新增快取內容的方法

@override

public

void

put(object key,

@nullable object value)

// 刪除快取內容的方法

@override

public

void

evict

(object key)

// 最後可以在各個方法內打個斷點試一試了,用@cacheable註解,然後在瀏覽器中訪問2次 分別檢視**走向

在@cacheable()中可以新增以下屬性

名字位置

描述示例

methodname

root object

當前被呼叫的方法名

#root.methodname

method

root object

當前被呼叫的方法

#root.method.name

target

root object

當前被呼叫的目標物件

#root.target

targetclass

root object

當前被呼叫的目標物件類

#root.targetclass

args

root object

當前被呼叫的方法引數列表

#root.args[0]

caches

root object

當前方法呼叫使用的快取列表

如:@cacheable(value=)

#root.root.cahches[0].name

argument name

root object

方法引數的名字,可以直接用#id、#a0、#p0呼叫,0代表索引

#iban、#a0、#p0

result

root object

方法執行的返回值,@cacheable不能呼叫

#result

應用示例:

@cacheable(name =「emp」,key="#id", ) 同時支援自定義keygenerator(),用key就不用keygenerator;

azkaban web server原始碼解析

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Redux原始碼createStore解讀常用方法

const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...