Spring快取註解 Cacheable

2021-10-25 02:24:37 字數 2160 閱讀 5700

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

value屬性指定cache名稱

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

@cacheable("cache1")//cache是發生在cache1上的

public user find(integer id)

@cacheable()//cache是發生在cache1和cache2上的

public user find(integer id)

使用key屬性自定義key

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

自定義策略是指我們可以通過spring的el表示式來指定我們的key。這裡的el表示式可以使用方法引數及它們對應的屬性。使用方法引數時我們可以直接使用「#引數名」或者「#p引數index」。下面是幾個使用引數作為key的示例。

@cacheable(value="users", key="#id")

public user find(integer id)

@cacheable(value="users", key="#p0")

public user find(integer id)

@cacheable(value="users", key="#user.id")

public user find(user user)

@cacheable(value="users", key="#p0.id")

public user find(user user)

除了上述使用方法引數作為key之外,spring還為我們提供了乙個root物件可以用來生成key。通過該root物件我們可以獲取到以下資訊。

屬性名稱

描述示例

methodname

當前方法名

#root.methodname

method

當前方法

#root.method.name

target

當前被呼叫的物件

#root.target

targetclass

當前被呼叫的物件的class

#root.targetclass

args

當前方法引數組成的陣列

#root.args[0]

caches

當前被呼叫的方法使用的cache

#root.caches[0].name

當我們要使用root物件的屬性作為key時我們也可以將「#root」省略,因為spring預設使用的就是root物件的屬性。如:

@cacheable(value=, key="caches[1].name")

public user find(user user)

condition屬性指定發生的條件

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

@cacheable(value=, key="#user.id", condition="#user.id%2==0")

public user find(user user)

Spring快取註解

快取註解有以下三個 cacheable cacheevict cacheput 1 cacheable value accountcache 這個注釋的意思是,當呼叫這個方法的時候,會從乙個名叫 accountcache 的快取中查詢,如果沒有,則執行實際的方法 即查詢資料庫 並將執行的結果存入快取...

Spring快取註解

spring從3.1開始定義了org.springframework.cache.cache和org.springframework.cache.cachemanager介面來統一不同的快取技術,並支援jcache jsr 107 註解簡化開發 當配置上redis之後快取註解就會將快取內容儲存在re...

spring快取cache的使用

在spring配置檔案中新增schema和spring對快取註解的支援 xmlns xmlns aop xmlns xsi xmlns mvc xmlns context xmlns tx xmlns p xmlns cache xsi schemalocation spring beans 3.0...