大部分公司在開發中運用緩存是一件很平常的事,主要用來緩解數據庫的訪問壓力,其使用方法和原理都類似於Spring對事務管理的支持。在我所開發中,一般都將這三個注解運用到方法上,那么其表現為:當我們調用這個緩存方法時會把該方法參數和返回結果作為一個鍵值對存放在緩存中,等到下次利用同樣的參數來調用該方法時將不再執行該方法,而是直接從緩存中獲取結果進行返回,這樣不僅減少了數據的返回時間,還極大的緩解了數據庫的訪問壓力,這也是使用緩存的主要目的。
一、注解@Cacheable的基本使用
你需要知道的基本知識點:
1.注解@Cacheable是數據緩存的注解,將此注解放在方法上表示此方法有緩存功能,放在類上表示此類的所有方法都有緩存功能;
方法上的緩存:
@Cacheable(value = "employee")
public Person findEmployee(String firstName, String surname, int age) {
return new Person(firstName, surname, age);
}
類上的緩存:
@Cacheable(value = "employee")
public class EmployeeDAO {
public Person findEmployee(String firstName, String surname, int age) {
return new Person(firstName, surname, age);
}
public Person findAnotherEmployee(String firstName, String surname, int age) {
return new Person(firstName, surname, age);
}
}
2.注解的參數
@Cacheable(value = "employee", key = "#surname", condition = "#age < 25")
public Person findEmployeeBySurname(String firstName, String surname, int age) {
return new Person(firstName, surname, age);
}
在這個緩存注解中,value參數必不可少,表示的是此緩存的存儲空間名,就像Mapper文件里的namespace一樣,是為了區分不同的緩存數據,其它參數可有可無;
key參數是取值的標識符,是你取緩存的入口,就像Map集合的key,靠key去取緩存值,默認是方法的所有參數進行組合,這里可以使用SpEL語言,像上面圖例中,我就是將參數surname作為key,但是這樣單純的靠一個參數還是不保險,因為可能會遇到相同surname的情況,這樣,key就重復了,所以要想辦法保證key唯一;
condition參數表示條件,滿足條件的才會緩存,當然,這個方法都會執行,像上面圖例中就表示年齡小於25的數據都會被緩存;
二、注解@CacheEvict的基本使用
你需要知道的基本知識點:
1.這個注解的作用是清除緩存;
2.參數
value:表示要被清除的緩存的存儲空間名;
key:緩存的key,默認為空;
condition:清除緩存的條件,同上,支持SpEL語言;
allEntries:true表示清除value中的全部緩存,默認為false
beforeInvocation:是否在方法執行前就清空,缺省為 false,如果指定為 true,則在方法還沒有執行的時候就清空緩存,缺省情況下,如果方法執行拋出異常,則不會清空緩存
//清除掉指定key的緩存
@CacheEvict(value="andCache",key="#user.userId + 'findById'")
public void modifyUserRole(SystemUser user) {
System.out.println("hello andCache delete"+user.getUserId());
}
//清除掉全部緩存
@CacheEvict(value="andCache",allEntries=true)
public final void setReservedUsers(String[] reservedUsers) {
System.out.println("hello andCache deleteall");
}
三、注解@CachePut的基本使用
你需要知道的知識點:
1.此注解是針對方法的,也是緩存數據的注解,基本功能與@Cacheable一樣,不過不同的是此注解無論如何都會執行實際方法,而@Cacheable一旦檢測到有緩存,則不執行實際方法。
2.參數
value:緩存的名稱,在 spring 配置文件中定義,必須指定至少一個;
key:緩存的 key,可以為空,如果指定要按照 SpEL 表達式編寫,如果不指定,則缺省按照方法的所有參數進行組合;
condition:緩存的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行緩存;
3.一般使用點
更新緩存,一般將此注解放在更新方法上,這樣就能實時更新緩存數據,需要注意的是key和value的取值,因為是依靠這兩個參數確定到某個緩存更新。
好了,此次三個注解已經介紹完畢,在以后的基本使用中應該也沒啥問題,我們將在下一章介紹緩存注解與框架的配置,以及緩存數據的存儲方面的知識!
