Vamos ha hacer una pequeña cache para unos servicios en spring boot.
Primero es necesario tener instalado Redis, y si ...
Luego agregamos esta dependencia a nuestro proyecto (uso gradle) :
implementation("org.springframework.boot:spring-boot-starter-cache")
implementation("org.springframework.boot:spring-boot-starter-data-redis")
Luego configuramos en nuestro cache con esta clase :
package com.uap.demo.config
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.redis.cache.RedisCacheConfiguration
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
import org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair
import java.time.Duration
@Configuration
class CacheConfig {
@Bean
fun cacheConfiguration(): RedisCacheConfiguration? {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(60))
.disableCachingNullValues()
.serializeValuesWith(SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer()))
}
}
Yo le puse 60 minutos de vida a mis datos dado que no cambian tan frecuente.
Ahora en el Application agregamos @EnableCaching, algo así :
@SpringBootApplication
@EnableCaching
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
Por ultimo a nuestro servicio le decimos que vamos a cachear los datos, en este ejemplo tengo un servicio X :
@Service
class XServiceImpl : XService {
@Cacheable(value = ["xxxxx"])
override fun x(parametro: String): List<String> {
...
}
}
Lo que va a ocurrir es que cuando llamemos al servicio con un parametro, se va generar una entrada en Redis, y la próxima vez que llamemos este servicio usará la cache.
Y listo!!!