緩存註解簡介——@Cacheable、@CachePut和@CacheEvict

註解@Cacheable和@CachePut都可以保存緩存鍵值對,只是它們的方式略有不同,請注意二者的區別,它們只能運用於有返回值的方法中,而刪除緩存key的@CacheEvict則可以用在void的方法上,因爲它並不需要去保存任何值。

  • @Cacheable:表明在進入方法之前,Spring會先去緩存服務器中查找對應key的緩存值,如果找到緩存值,那麼Spring將不會再調用方法,而是將緩存值讀出,返回給調用者;如果沒有找到緩存值,那麼Spring就會執行你的方法,將最後的結果通過key保存在緩存服務器中。
  • @CachePut:Spring會將方法返回的值緩存到緩存服務器中,這裏需要注意,Spring不會事先去緩存服務器中查找,而是直接執行方法,然後緩存。
  • @CacheEvict:移除緩存對應的key的值。
  • @Caching:這是一個分組註釋,它能夠同時應用於其他緩衝的註解。

一般而言,對於查詢,我們會考慮使用@Cacheable,對於插入和修改,我們會考慮使用@CachePut,對於刪除,我們會考慮採用使用@CacheEvict。

註解@Cacheable和@CachePut

它們的屬性:

  1. value:使用緩存的名稱。
  2. condition:Spring表達式,如果表達式返回值爲false,則不會將緩存應用到方法中,true則會。
  3. key:Spring表達式,可以通過它來計算對應的緩存的key。
  4. unless:Spring表達式,如果表達式返回值爲true,則不會將方法的結果放到緩存上。

其中,因爲value和key這兩個熟悉使用得最多,所以先來討論這兩個屬性。value是一個數組,可以引用多個緩存管理器,而對於key則是緩存中的鍵,它支持Spring表達式,通過Spring表達式就可以自定義緩存的key。

註解@CacheEvict

註解@CacheEvict主要是爲了移除緩存的鍵值對,主要對於那些刪除的操作,先來了解它存在哪些屬性。
value和key與之前的@Cacheable和@CachePut是一致的,而屬性allEntries要求刪除緩存服務器中所有的緩存,這個時候指定的key將不會生效,所以這個屬性要慎用。

  • value:要使用緩存的名稱
  • key:指定String表達式返回緩存的key
  • condition:指定String表達式,如果返回爲true,則執行移除緩存,否則不執行。
  • allEntries:如果爲true,則刪除特定緩存所有的鍵值對,默認值爲false。
  • beforeInvocation:指定在方法前後移除緩存,如果指定爲true,則在方法前刪除緩存;如果爲false,則在方法調用後刪除緩存。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章