当前位置: 代码迷 >> java >> 使用自定义刷新和逐出Java在DAO上缓存实现
  详细解决方案

使用自定义刷新和逐出Java在DAO上缓存实现

热度:26   发布时间:2023-08-02 11:22:20.0

在我的应用程序中,我有一个场景,我必须每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();
    }  
  }
}

但是在这种情况下文档似乎不太有用。

  相关解决方案