Spring二級快取

2021-10-07 17:35:19 字數 2949 閱讀 8759

`@enablecaching`
在serviceimpl層加

查詢:@cacheable(value="userlist")

新增:@cacheevict(value="userlist",allentries = true)

1.31@cacheable

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

– value屬性是必須指定的,其表示當前方法的返回值是會被快取在哪個cache上的,對應cache的名稱。其可以是乙個cache也可以是多個cache,當需要指定多個cache時其是乙個陣列。

– key屬性是用來指定spring快取方法的返回結果時對應的key的。該屬性支援springel表示式。當我們沒有指定該屬性時,spring將使用預設策略生成key。

– 有的時候我們可能並不希望快取乙個方法所有的返回結果。通過condition屬性可以實現這一功能。condition屬性預設為空,表示將快取所有的呼叫情形。其值是通過springel表示式來指定的,當為true時表示進行快取處理;當為false時表示不進行快取處理,即每次呼叫該方法時該方法都會執行一次。如下示例表示只有當user的id為偶數時才會進行快取。

1.32@cacheevict

@cacheevict是用來標註在需要清除快取元素的方法或類上的。當標記在乙個類上時表示其中所有的方法的執行都會觸發快取的清除操作。@cacheevict可以指定的屬性有value、key、condition、allentries和beforeinvocation。其中value、key和condition的語義與@cacheable對應的屬性類似。即value表示清除操作是發生在哪些cache上的(對應cache的名稱);key表示需要清除的是哪個key,如未指定則會使用預設策略生成的key;condition表示清除操作發生的條件。下面我們來介紹一下新出現的兩個屬性allentries和beforeinvocation。

– allentries是boolean型別,表示是否需要清除快取中的所有元素。預設為false,表示不需要。當指定了allentries為true時,spring cache將忽略指定的key。有的時候我們需要cache一下清除所有的元素,這比乙個乙個清除元素更有效率。

– 清除操作預設是在對應方法成功執行之後觸發的,即方法如果因為丟擲異常而未能成功返回時也不會觸發清除操作。使用beforeinvocation可以改變觸發清除操作的時間,當我們指定該屬性值為true時,spring會在呼叫該方法之前清除快取中的指定元素。

1.33@cacheput

在支援spring cache的環境下,對於使用@cacheable標註的方法,spring在每次執行前都會檢查cache中是否存在相同key的快取元素,如果存在就不再執行該方法,而是直接從快取中獲取結果進行返回,否則才會執行並將返回結果存入指定的快取中。@cacheput也可以宣告乙個方法支援快取功能。

與@cacheable不同的是使用@cacheput標註的方法在執行前不會去檢查快取中是否存在之前執行過的結果,而是每次都會執行該方法,並將執行結果以鍵值對的形式存入指定的快取中。

@cacheput也可以標註在類上和方法上。使用@cacheput時我們可以指定的屬性跟@cacheable是一樣的。

@cacheput(「users」)//每次都會執行方法,並將結果存入指定的快取中

@aspect

@component

public

class

logaspect

/** * 前置通知

** @param joinpoint 切入點

*/@before

("logaspect()"

)public

void

dobefore

(joinpoint joinpoint)

/** * 後置通知

** @param joinpoint 切入點

*/@after

("logaspect()"

)public

void

doafter

(joinpoint joinpoint)

/** * 最終通知

** @param joinpoint 切入點

*/@afterreturning

("logaspect()"

)public

void

doafterreturning

(joinpoint joinpoint)

/** * 異常通知

** @param joinpoint 切入點

*/@afterthrowing

("logaspect()"

)public

void

deafterthrowing

(joinpoint joinpoint)

/** * 環繞通知

** @param joinpoint 切點

* @return

* @throws throwable

*/@around

("logaspect()"

)public object dearound

(proceedingjoinpoint joinpoint)

throws throwable

}

spring中配置二級快取

true org.hibernate.cache.ehcacheprovider 2.其次,在src目錄下的ehcache.xml中配置如下資訊 如果是預設ehcache.xml則會有和 去掉 3.將你要快取的model加進ehcache.xml裡 4.最後一步,在tarticleclass.hbm...

hibernate二級快取

cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...

hibernate 二級快取

session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...