es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi caché de Spring redis no funciona incluso con anotaciones?

Sigo las instrucciones de este tutorial (https://www.baeldung.com/spring-boot-redis-cache)

@Cacheable(value = “itemCache”)
public UserInfo getUserInfo(String id) {
// sin manipulación explícita de la caché, el valor no se puede recuperar de Redis
UserInfo res = cacheManager.getCache(“itemCache”).get(id, UserInfo.class);
if (res != null) {
return res;
}
try {
… recuperar de la base de datos …
res = convertMapToUserInfo(id, userInfoMap);
// sin manipulación explícita de la caché, el valor no se puede guardar en Redis
cacheManager.getCache(“itemCache”).put(id, res);
return res;
}
} catch (Exception e) {

} finally {

}
return null;
}

Lo extraño es que tengo que poner y obtener elementos de la caché manualmente, incluso cuando uso la anotación Cacheable. Sin manipulación explícita de la caché, el valor devuelto de getUserInfo no se puede almacenar en caché.

La clase RedisConfiguration contiene el código

@Bean
public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() {
return (builder) -> builder
.withCacheConfiguration(“itemCache”,
this.cacheConfiguration());

}

@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}

También agregué @EnableCaching a mi clase de aplicación. ¿Alguien podría ayudarme a descubrir por qué mi caché no tiene efecto? ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el fragmento de código y el tutorial proporcionado, parece que se está utilizando adecuadamente la anotación Cacheable. Sin embargo, el problema puede estar relacionado con la configuración del RedisCacheConfiguration o del servidor Redis.

    A partir del código de RedisCacheConfiguration, se puede deducir que la caché de valores nulos está desactivada y que los valores se están serializando utilizando el GenericJackson2JsonRedisSerializer. Asegúrese de que el serializador utilizado sea compatible con los datos que se están almacenando en caché.

    Además, compruebe si el servidor Redis está en ejecución y es accesible. Si el servidor Redis no es accesible, la caché no tendrá efecto. Intente revisar los registros del servidor Redis en busca de errores o problemas.

    Asegúrese también de que el nombre de la caché “itemCache” no esté en conflicto con otras cachés o claves Redis en el sistema.

    También puede intentar habilitar el registro de depuración para los paquetes de caché y Redis para obtener más información sobre el problema.

    Esperemos que esto ayude a resolver el problema.

Comments are closed.