2017-12-20 19 views
0

현재 웹 응용 프로그램에 Spring 웹 프레임 워크를 사용하고 있습니다. ehcache.xml을 읽고 CacheManager를 생성하고 캐시에서 요소를 가져 오거나 캐시에 요소를 추가하는 데 사용되는 기본 CacheConfig.java 파일을 구현했습니다. 다음과 같이 내 ehcache.cml은 다음과 같습니다새 버전의 객체를 성공적으로 가져올 때 만 만료 된 객체를 바꿀 ehcache를 구성하는 방법

<cache name="Cache" 
     maxEntriesLocalHeap="100" 
     maxEntriesLocalDisk="0" 
     eternal="false" 
     diskSpoolBufferSizeMB="0" 
     timeToIdleSeconds="43200" 
     timeToLiveSeconds="43200" 
     memoryStoreEvictionPolicy="LFU" 
     > 
    <persistence strategy="none"/> 

첫 번째 요소의 이전 버전을 삭제할 않는 경우에만 성공적인 검색과 백엔드 데이터베이스 (SOR)에서 개체를 찾아 새로 고쳐집니다 어떻게 그 캐시를 보장 할 수 있습니다 ?

EDIT : 새로 고침 전략을위한 CacheLoader.

public class TestCacheLoader implements CacheLoader { 
@Override 
public Object load(Object key) throws CacheException { 
    //return null; 
    return load(key,null); 


} 

@Override 
public Map loadAll(Collection keys) { 
    //return null; 
    return loadAll(keys,null); 
} 

@Override 
public Object load(Object key, Object argument) { 
    Object obj = null; 
    try { 
     obj = ReadFromDatabase(key); 
    } catch (DatabaseValueNotFoundException e) { 
     **How can I return the old value here?** 
    } 
    return obj; 
} 

@Override 
public Map loadAll(Collection keys, Object argument) { 
    //return null; 
    Map newValues = new HashMap<Object,Object>(); 
    for(Object key : keys){ 
     Object value = load(key,null); 
     if(value != null){ 
      newValues.put(key,value); 
     } 
    } 
    return newValues; 
} 

@Override 
public String getName() { 
    return null; 
} 

@Override 
public CacheLoader clone(Ehcache ehcache) throws CloneNotSupportedException { 
    return null; 
} 

@Override 
public void init() { 

} 

@Override 
public void dispose() throws CacheException { 

} 

@Override 
public Status getStatus() { 
    return null; 
} 

}

답변

0

당신이 무엇을 물어 수행하기위한 기본 지원에는 밖으로 없다.

Ehcache 2.x는 refresh ahead을 지원하며, scheduled refresh ahead으로 추가 조정할 수 있습니다. 당신이 묻고있는 것이 아니지만 충분히 가까이있을 수도 있습니다. 문제는 편집 된

** 추가 한 후 **

무엇 당신의 편집 제안하면 DB가 더 이상 그 키에 대한 항목이 있기 때문에 대신이 사용자를 말하는의, 오래된 가치를 유지하려는 없다는 것입니다 가치가 없다. 여기에는 다시 캐시의 원칙에 어긋나지 않으므로 지원이 없습니다.

+0

제 편집을 참조하십시오. 캐시 로더가 값을로드하는 캐시의 값에 액세스 할 수 없으므로 캐시에서 이전 값을 반환하는 방법을 이해할 수 없습니다. –