spring對緩存的使用@Cacheable


@Cacheable(value = "CACHE_BOOK",key = "#username", condition = "#language = 1")
public List<Book> getBooksByUsernameAndLanguage(String username, int language) {
     // balabalabala...里面的代碼不重要
     return bookList;
}

@Cacheable注解只有三個屬性。

  • value : 必須要的。就是個自己取的名字,通過它指明了第一次調用這個方法時返回的bookList將被存在內存的哪里。
  • key : 可選。要使用SpEL表達式,這里與參數username對應,當傳入的username值變了的話就不去取緩存里的數據了,而是執行getBooksByUsernameAndLanguage方法。(這是必須的,因為username變了,返回值也就變了,緩存里的數據不符合了,因此這個選項很重要)。spring默認用方法的簽名來當做key。
  • condition:方法返回的結果bookList,要不要緩存起來?condition就添加了一個限定條件。這個例子中,只有傳入的語言代碼是1,返回的bookList才會被緩存起來,如果給language傳了別的值,那么bookList是不會緩存起來的。

 

 

 

 注意事項:1、@Cacheable必須開啟緩存在啟動類上@EnableCaching

      2、返回的對象要實現緩存該對象是必須實現序列化接口的Serializable

      3、@Cacheable不可用在私有方法上面,可以放在接口和具體的方法上面

      4、@Cacheable這個注解是放在具體的方法上;

      5、@CacheConfig這個注解只能放在類上代表這個類所有緩存的公共屬性配置,比如value等非必須;

      6、key = "#對象.屬性"或者直接使用key = "#屬性";直接讀取的是方法形參內的參數屬性或者對象;

     7、key = "#對象.屬性.concat('Hydrologydata')"

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM