2017-04-08 5 views
3

루프에서 15000 번보다 더 많은 API를 명중 자바 REST API의 응답을 캐시하고 응답을 얻을 수 있습니다 모든 통화를 완료하는 데 몇 시간이 걸립니다. 통화 시간을 줄이기 위해 어떤 방법 (어떤 캐시 기술)이라도 제안하십시오.어떻게</p> <p>예</p> <pre><code>** username in for loop GET api.someapi/username processing end loop ** </code></pre> <p>(응답은 정적이다) 나는 java.I에서 응용 프로그램을 구축하고

PS :

1) 내가 타격하고 그 API는

나에 의해 개발하지 말 하나입니다 자바 나머지 클라이언트에서 API를 (봄 resttemplate)

2)를 타격하고 3) 히로쿠에 배치 할 것입니다.

+0

캐싱 시스템은 메모리 자원을 필요로하는 기본 방법

@Override @CacheEvict("currencyByIdentifier") <S extends Currency> S save(S currency); @Override @CacheEvict("currencyByIdentifier") void delete(Currency currency); 

를 재정 의하여 삭제합니다.특히 API가 자주 호출되는 경우. 실제로 상황이 명확하지 않습니다. 응답이 같으면 API를 15000 번 호출하는 이유는 무엇입니까? 왜 그런 식으로 결정 했습니까? 솔루션이 맞지 않아 상황을 설명하면 해결책을 제시하십시오. – Sarkhan

답변

5

Springs Cache Abstraction을 사용하여 시도해보십시오. https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html.

restTemplate 호출이있는 메소드에서이 추상화를 사용할 수 있습니다.

모든 메서드 호출 응답은 메서드 매개 변수를 키로 사용하고 반환 형식을 응답으로 사용하여이 추상화를 사용하여 캐시 할 수 있습니다.

@Cacheable("username") 
public UserResponse getUser(String username){ 
    // Code to call your rest api 
} 

이렇게하면 메소드에 대한 Spring AOP 권고가 작성됩니다. 메서드가 호출 될 때마다 데이터가이 키 (사용자 이름)에 대한 캐시에서 사용 가능한지 확인한 다음 yes이면 캐시에서 응답을 반환하고 실제 메서드를 호출하지 않습니다. 캐시에서 데이터를 사용할 수없는 경우 실제 메소드를 호출하고 캐시에 데이터를 캐시하므로 다음에 동일한 메소드가 동일한 키로 호출 될 때 데이터를 캐시에서 선택할 수 있습니다.

이 캐시 추상화는 Guava와 같은 간단한 JVM 캐시 또는 EHCache, Redis, HazelCast와 같은보다 정교한 캐시 구현으로 백업 할 수 있습니다.

3

그 대답에 대한 매우 중요한 메모 : 이러한 (캐시 된) 값을 업데이트하려는 경우 저장소에서 save() 및 delete()에 @CacheEvict를 사용하는 것을 잊지 마십시오. 그렇지 않으면 새 레코드가 업데이트 될 때 가져 오는 데 문제가 있습니다.

내가 (저장소의) (으로 Ehcache 포함) 내 솔루션이 방법으로 구현 :

CurrencyRepository.java : //이 캐시 문

정의를
@Cacheable("currencyByIdentifier") 
public Currency findOneByIdentifier(String identifier); 

CacheConfiguration.java : // EhCache 구성에서 해당 캐시를 정의하십시오.

@Bean 
public JCacheManagerCustomizer cacheManagerCustomizer() { 
    return cm -> { 
     cm.createCache("currencyByIdentifier", jcacheConfiguration); 
     cm.createCache("sourceSystemByIdentifier", jcacheConfiguration); 
    }; 
} 

CurrencyRepository.java : // 저장에 퇴거 나는 희망이 도움이 :)