1

在我的应用程序中,我有一个场景,我必须每 24 小时刷新一次缓存。我预计数据库会停机,所以我需要实现一个用例来在 24 小时后刷新缓存,前提是数据库正在运行。

我正在使用spring-ehache并且我确实实现了简单的缓存以每 24 小时刷新一次,但无法让我的头脑在数据库停机时保留可能。

4

1 回答 1

1

从概念上讲,您可以将调度和缓存驱逐分为两个模块,并且仅在满足特定条件(在这种情况下,数据库的健康检查返回)时才清除缓存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 回答