2017-12-13 28 views
0

예기치입니다. 이제 list 요소에 Put 작업을 수행하고 있습니다. 해당 요소에 대해 작업이 성공적으로 수행되고 캐시도 업데이트됩니다. 하지만 GET 작업을하고있는 중이 야 때 다시 내 업데이트 캐시가 작동 여부 을 테스트 목록을 검색, 내가 대신 전체 목록 여기봄 @CachePut 응답은 내가 목록을 검색 할 수있는 가져 오기 작업을 수행 예상대로 cache.It의 응답이 제대로 작동 저장 내가 SpringBoot</p> <p>와 함께으로 Ehcache를 사용하고

의 업데이트됩니다 응답 단지 요소를 가지고 코드는 다음과 같습니다

@Override 
@Cacheable(value = "practiceId", key="#practiceId", unless="#result==null") 
public List<ExposedLocation> getLocations(String practiceId) { 
    // getLocations list logic 
} 
@CachePut(value = "practiceId", key ="#practiceId") 
public List<ExposedLocation> updateLocation(List<LocationDB> locationList, String practiceId) { 
    //Update location logic 
} 

ehcache.xml :

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"> 
<cache name="practiceId" maxEntriesLocalHeap="200" eternal="false" 
    memoryStoreEvictionPolicy="LFU" timeToLiveSeconds="600" 
    timeToIdleSeconds="200"> 
</cache> 

그래서 응답 내 분석에 따라 그리고 내가 사용한 몇 가지 테스트 케이스들 Get과 Put의 Response가 다르다는 결론을 내 렸습니다. @CachePut은 먼저 캐시를 제거하고 새 캐시를 생성하고 을 생성하고 새로운 캐시에 업데이트의 응답을 넣습니다.

누구든지 업데이트 된 요소가 포함 된 전체 목록을 검색하는 데 도움을 줄 수 있습니다. 여기서 @CachePut ??????를 구성하지 못했습니다.

답변

0

스프링 캐싱 추상화는 동일한 키 아래의 두 메소드에서 결과를 캐싱하여 요청한 것과 정확히 동일합니다. 이제 실제로 메서드가 다른 결과를 반환하면 이것이 문제의 근원입니다.

이 목록이 현재 캐시 된 것으로 병합되도록 캐시에 알리기위한 기본 제공 지원이 없습니다.

+0

그래서 이전 캐시의 백업에 논리를 추가하고 새로운 캐시에 병합해야한다고 말합니다. 맞습니까? –

+0

두 방법 모두 동일한 결과를 반환하는지 확인하십시오. –