Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

446
Vistas
Cómo almacenar en caché la respuesta de la API REST en Java

Estoy creando una aplicación en java. Presioné api más de 15000 veces en bucle y obtuve la respuesta (la respuesta es solo estática)

Ejemplo

 ** username in for loop GET api.someapi/username processing end loop **

Se están tardando horas en completar todas las llamadas. Sugiérame cualquier forma (cualquier tecnología de caché) para reducir el tiempo de llamada.

PD:

1) Estoy accediendo a api desde java rest client (Spring resttemplate)

2) esa api que estoy utilizando es la pública, no desarrollada por mí

3) va a implementar en heroku

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una nota muy importante para esa respuesta: si alguna vez planea actualizar esos valores (almacenados en caché), no olvide usar @CacheEvict en save() y delete() en los repositorios. De lo contrario, tendrá problemas para obtener el nuevo registro cuando se actualice.

Implementé mi solución (con EhCache) de esta manera (en el repositorio):

CurrencyRepository.java: // definir una declaración almacenable en caché

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

CacheConfiguration.java: // Definir ese caché en EhCache Configuration

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

CurrencyRepository.java: // desalojar al guardar y eliminar anulando el método predeterminado

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

Espero que eso ayude :)

about 4 years ago · Santiago Trujillo Denunciar

0

Intente usar Springs Cache Abstraction, docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html .

Puede usar esta abstracción en el método que tiene la llamada restTemplate.

Cualquier respuesta de llamadas a métodos se puede almacenar en caché utilizando esta abstracción, con los parámetros del método como claves y el tipo de retorno como respuesta.

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

Esto crea un consejo Spring AOP sobre el método. Cada vez que se llama al método, verifica si los datos están disponibles en el caché para esta clave (nombre de usuario), si es así, devuelve la respuesta del caché y no llama al método real. Si los datos no están disponibles en la memoria caché, llama al método real y almacena los datos en la memoria caché, de modo que la próxima vez que se llame al mismo método con la misma clave, los datos se pueden seleccionar de la memoria caché.

Esta abstracción de caché puede respaldarse con cachés JVM simples como Guava o implementaciones de caché más sofisticadas como EHCache, Redis, HazelCast también.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda