1

私のアプリケーションでは、24 時間ごとにキャッシュを更新する必要があるシナリオがあります。データベースのダウンタイムが予想されるため、データベースが稼働している場合にのみ、24 時間後にキャッシュを更新するユース ケースを実装する必要があります。

私はspring-ehacheを使用しており、24時間ごとに更新する単純なキャッシュを実装しましたが、データベースのダウンタイムで保持を可能にするために頭を悩ませることができません。

4

1 に答える 1

1

概念的には、スケジューリングとキャッシュの削除を 2 つのモジュールに分割し、特定の条件 (この場合、データベースのヘルスチェックが を返す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 では、カスタム エビクション アルゴリズムを作成することもできますが、この場合、ドキュメントはあまり役に立ちません。

于 2015-07-27T20:56:07.617 に答える