spring 3 1中的cache小結

2021-09-01 10:54:10 字數 2766 閱讀 8219

spring 3.1中有cache了,下面結合目前網上的一些資料和手冊的歸納總結下:

1 @cache註解

在3.1中,都是用註解的了,

@cacheable註解可以用在方法或者類級別。當他應用於方法級別的時候,就是如上所說的快取返回值了。當應用在類級別的時候,這個類的所有方法的返回值都將被快取。

@cacheable(value = "employee")

public class employeedao

public person findanotheremployee(string firstname, string surname, int age)

}

在上面的**中,快取了person了,命名為employee,快取的是方法的值,

@cacheable註解有三個引數,value是必須的,還有key和condition。第乙個引數,也就是value指明了快取將被存到什麼地方。

在spring 3.1中,可以使用spel表示式去進行快取的指定,比如:

@cacheable(value = "employee", key = "#surname")

public person findemployeebysurname(string firstname, string surname, int age)

這裡注意指定的快取的是根據key=surename。也可以指定表示式

@cacheable(value = "employee", condition = "#age < 25")

public person findemployeebyage(string firstname, string surname, int age)

這裡指定age<25的才快取;

接下來看下如何應用,比如:

@test

public void testcache()

這個時候肯定是相等的了,因為用的是快取。但是如果呼叫的是

findemployeebysurname方法的話,就一定有點不同了,

@test

public void testcacheonsurnameaskey()

但由於是快取的是根據surename為key,所以上面結果兩個物件卻依然是相等的(儘管原本看上去是不同的物件了),所以key的選擇一定要小心。

繼續單元測試:

@test

public void testcachewithageascondition()

這兩個就一樣了,因為都是age<25的,都快取了,指向同乙個物件。

2 取消快取

下面看下如何取消快取

@cacheevict

@cacheevict(value = "employee", allentries = true)

public void resetallentries()

使用@cacheevict去取消快取,

@cacheevict支援如下幾個引數:

value:快取位置名稱,不能為空,同上

key:快取的key,預設為空,同上

condition:觸發條件,只有滿足條件的情況才會清除快取,預設為空,支援spel

allentries:true表示清除value中的全部快取,預設為false

當然,也可以@cahceable和@cacheevict一起使用,比如:

@cacheevict(value = "employee", beforeinvocation = true)

@cacheable(value = "employee")

public person evictandfindemployee(string firstname, string surname, int age)

@test

public void testbeforeinvocation()

這裡的話,先使用@cacheevict(value = "employee", beforeinvocation = true),

會先清掉所有快取,所以asset的結果就不相等了;

3 如何配置

.spring-cache

首先我們來看一下如何使用spring3.1自己的cache,

需要在命名空間中增加cache的配置

beans xmlns=""

xmlns:xsi="" xmlns:p=""

xmlns:cache=""

xsi:schemalocation="

/spring-beans-3.1.xsd

/spring-cache-3.1.xsd">

spring對ehcache並沒有很好的支援,不建議使用,可以參看

Spring 3 1 任務排程

命名空間 xsd location spring task 3.0.xsd 任務排程器配置 task scheduler pool size 排程執行緒池的大小,排程執行緒在被排程任務完成前不會空閒 task scheduled cron cron表示式,注意,若上次任務未完成,即使到了下一次排程時...

Spring 3 1 新特性一覽表

紅薯 發布於 2011年12月15日 經過接近大半年的rc,spring3.1終於release了 主要功能如rc版所示一樣,非常值得公升級 1 基於annotation的cache服務,這個非常好 這個最早源於spring2.x時代的spring modules專案中的cache子專案 我自己也曾...

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...