簡體   English   中英

在 Spring 中使用 @Cacheable 和 @CacheEvict

[英]Using @Cacheable and @CacheEvict in Spring

我開發了一種使用@Cacheable注釋的方法。 代碼是:

   @Cacheable(value="reporties" , key="{#root.methodName,#manager.name}")
   public List<Employee> getReportiesForManager(Employee manager){
     // code to fetch reporties its a Spring JDBC call
   }

現在,我想在發生一些事件后驅逐這個緩存:

  • 一些與經理相關的報告已更新(添加或刪除)。

之后,應該驅逐與管理器相關的緩存,這樣,應用程序將獲得新數據,而不是使用該緩存中的現有數據。 我為此開發了以下方法:

@CacheEvict(value="reporties",key="{#name}")
public void evictReportiesCache(String name){}

我調用內部更新管理器及其報告者關系的方法。 但是,這個間歇性地工作,我不確定這是否是驅逐緩存的正確方法。 此外,Cacheable 使用#root.methodName作為鍵的一部分。

有人可以幫我處理這個緩存驅逐嗎?

您可以將緩存視為Map<key, value>

每次您使用@Cacheable注釋調用方法時,您都會在該Map寫入一個與您定義為它們的鍵相關聯的值。

每次使用@CacheEvict注釋調用方法時, @CacheEvict刪除與鍵關聯的值。 您還可以刪除地圖中的所有條目。

如果傳遞給CacheableCacheEvict注釋的鍵標識相同的數據,則它們必須相同。

如果您想通過經理的姓名驅逐您的報告緩存,您需要僅根據經理的姓名進行緩存驅逐

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM