2014-11-06 1 views
0

나는 문자열의 목록을 반환 봄 +으로 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; 
} 

답변

1

Ehcache에는 몇 가지 내장 솔루션이 있지만 캐시 작업 방식에 약간의 수정이 필요합니다.

자세한 내용은 this answer을 참조하십시오.

이러한 구조는 Spring의 캐싱 추상화를 통해 노출되지 않으며 스프링 캐싱 설명서의 point 29.7을 참조하십시오.

+0

고마워요,이게 정확히 내가 원하는 것 같습니다. 그러나이 캐싱 메커니즘은 무료 라이센스가 아닌 Terracotta BigMemory의 일부로 제공됩니다. –

+0

아니요, 설명서가 호스팅되어 있지만이 두 기능은 오픈 소스 배포에서 사용할 수 있습니다. –

+0

캐시 로더를 구현하기 위해 "미리 새로 고침"하려면 "net.sf.ehcache.constructs.refreshahead.RefreshAheadCacheFactory"패키지가 필요하며 이는 ehcache-core 라이브러리에 포함되어 있습니다. 그래서 일단이 라이브러리를 추가하고 http://terracotta.org/documentation/4.1/bigmemorymax/api/refresh-ahead에서 지정된대로 구성을 추가하면 이것이 효과가 있습니까? –

0

나는이 일에 추측을 바로 거입니다 : 여기

이 가능한 솔루션입니다

bootstrapCacheLoaderFactory이 - BootstrapCacheLoader를 지정하는 에 의해 호출된다 초기화시 캐시하여 캐시를 미리 채 웁니다.

cacheLoaderFactory - CacheLoader를 비동기 적으로 사용하고 을 동시에 사용하여 캐시에 객체를로드 할 수 있습니다. 하나 이상의 cacheLoaderFactory 요소 을 추가 할 수 있습니다.이 경우 로더는 순서대로 실행되는 체인을 형성합니다. 로더가 null을 반환하면 체인의 다음 체인이 호출됩니다. 이 만료되기 전에 요소를 위해 살 수있는 시간을 설정 :

timeToIdleSeconds 자원 아래

timeToLiveSeconds 신선한 동기화 당신에게 데이터를 유지하는 방법이 될 수 있습니다. 즉, 생성 시간과 요소가 만료되는 최대 시간입니다. 요소가 영원하지 않은 경우에만 사용됩니다. 선택적 특성입니다. 값 0은 요소가 무한대로 살 수 있음을 의미합니다. 기본값은 0입니다.

살펴볼 2 가지 일 수 있습니다. 내가 말하는이 모든 일들이 Ehcache.xml에 cachemananger의이 파일에 설정입니다

http://ehcache.org/ehcache.xml

당신이 게시 할 수 있도록으로 Ehcache의 웹 사이트에 대한 정보의 톤 (및 포럼을 찾을 수 있습니다

당신의 좀 더 전문적인 도움을 얻기 위해 거기에 질문하십시오.)

+0

Ehcache 포럼은 구식이며 StackOverflow를 폐지하고 있습니다. –