在我的应用程序中,我有一个场景,我必须每 24 小时刷新一次缓存。我预计数据库会停机,所以我需要实现一个用例来在 24 小时后刷新缓存,前提是数据库正在运行。
我正在使用spring-ehache并且我确实实现了简单的缓存以每 24 小时刷新一次,但无法让我的头脑在数据库停机时保留可能。
在我的应用程序中,我有一个场景,我必须每 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 还允许您创建自定义驱逐算法,但在这种情况下文档似乎没有太大帮助。