在我的应用程序中,我有一个场景,我必须每24小时刷新一次缓存。 我期待数据库停机,所以我需要在24小时后实现一个用例来刷新缓存,只有在数据库运行时。
我正在使用 spring-ehache ,我确实实现了每24小时刷新一次的简单缓存,但无法解决问题,以便在数据库停机时进行保留。
答案 0 :(得分: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 also allows you to create a custom eviction algorithm但在这种情况下,文档似乎没有用处。