나는 문자열의 목록을 반환 봄 +으로 Ehcache를 사용하고 있습니다 :다시 채우기으로 Ehcache 값은
은으로 Ehcache가 자동으로 캐시 때 시간 초과를 다시 채울 configued 수 있습니다
@Cacheable(value = "test", key = "\"myKey"")
public List<String> getValues() {
return getMyValues();
}
? 나는 캐시를 지우는 데
@CacheEvict
을 사용하는 것을 알고 있지만 이것은 수동 작업입니다.
업데이트 :
이import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
public class MyCacheScheduler {
public void repopulateCache(){
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(5);
@SuppressWarnings({ "rawtypes", "unchecked" })
ScheduledFuture scheduledFuture =
scheduledExecutorService.schedule(new Callable() {
public Object call() throws Exception {
myCache.clearCache();
myCache.populateCache();
return "";
}
},
30,
TimeUnit.SECONDS);
try {
System.out.println("result = " + scheduledFuture.get());
} catch (Exception e) {
e.printStackTrace();
}
}
@Autowired
private MyCacheManagerImpl myCache;
}
고마워요,이게 정확히 내가 원하는 것 같습니다. 그러나이 캐싱 메커니즘은 무료 라이센스가 아닌 Terracotta BigMemory의 일부로 제공됩니다. –
아니요, 설명서가 호스팅되어 있지만이 두 기능은 오픈 소스 배포에서 사용할 수 있습니다. –
캐시 로더를 구현하기 위해 "미리 새로 고침"하려면 "net.sf.ehcache.constructs.refreshahead.RefreshAheadCacheFactory"패키지가 필요하며 이는 ehcache-core 라이브러리에 포함되어 있습니다. 그래서 일단이 라이브러리를 추가하고 http://terracotta.org/documentation/4.1/bigmemorymax/api/refresh-ahead에서 지정된대로 구성을 추가하면 이것이 효과가 있습니까? –