簡體   English   中英

使用自定義刷新和逐出Java在DAO上緩存實現

[英]cache implementation on DAO with custom refresh and evictions java

在我的應用程序中,我有一個場景,我必須每24小時刷新一次緩存。 我預計數據庫會停機,因此僅在數據庫運行時,我才需要實現一個用例來在24小時后刷新緩存。

我使用的是spring-ehache ,確實實現了每24小時刷新一次的簡單緩存,但是卻無法動手以確保在數據庫停機時進行保留。

從概念上講,您可以將調度和緩存逐出分為兩個模塊,並且僅在滿足某些條件(在這種情況下,數據庫的運行狀況檢查返回true )時清除緩存:

SomeCachedService.java

class SomeCachedService {
  @Autowired
  private YourDao dao;

  @Cacheable("your-cache")
  public YourData getData() {
    return dao.queryForData();
  }

  @CacheEvict("your-cache")
  public void evictCache() {
    // no body needed
  }
}

CacheMonitor.java

class CacheMonitor {
  @Autowired
  private SomeCachedService service;

  @Autowired
  private YourDao dao;

  @Scheduled(fixedDelay = TimeUnit.DAYS.toMillis(1))
  public conditionallyClearCache() {
    if (dao.isDatabaseUp()) {
      service.evictCache();
    }  
  }
}

Ehcache還允許您創建自定義逐出算法,但是在這種情況下文檔似乎不太有用。

暫無
暫無

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

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