Saltar al contenido

Almacenamiento en caché en Spring 5 WebFlux

Si hallas algún error en tu código o trabajo, recuerda probar siempre en un entorno de testing antes subir el código al proyecto final.

Solución:

Hay un complemento de caché de reactor que se puede usar con Spring CacheManager. Pero, como lo señalan los comentarios en la respuesta aceptada, actualmente, las API de caché de Spring (obtiene y pone) todavía están bloqueando. Solo podemos hacer que el programa sea completamente reactivo hasta que se resuelva este problema.

Aquí está el fragmento de código de muestra en Java. El proyecto de muestra completo está aquí en github.

@Service
public class CatServiceImpl implements CatService 
    private static final String CACHE_NAME = "sr";
    private static final String KEY = "k";
    @Autowired
    private WebClient client;

    @Autowired
    private CacheManager cacheManager;

    @SuppressWarnings("unchecked")
    private Function>>> reader = k -> Mono
            .justOrEmpty((Optional.ofNullable((List) (cacheManager.getCache(CACHE_NAME).get(k, List.class)))))
            .flatMap(v -> Flux.fromIterable(v).materialize().collectList());

    private BiFunction>, Mono> writer = (k, sigs) -> Flux.fromIterable(sigs)
            .dematerialize().collectList().doOnNext(l -> cacheManager.getCache(CACHE_NAME).put(k, l)).then();

    @Override
    public Flux search() 
        Flux fromServer = client.get().retrieve().bodyToFlux(CatDto.class);

        return CacheFlux.lookup(reader, KEY).onCacheMissResume(fromServer).andWriteWith(writer);
    


Te mostramos comentarios y calificaciones

Si estás contento con lo expuesto, eres capaz de dejar un artículo acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *