Implementación Práctica de Spring Cache en Spring Boot

Spring Cache proporciona una abstracción robusta para integrar mecanismos de caché en aplicaciones Spring Boot, utilizando anotaciones para simplificar su configuración y uso.

Anotación Función
@EnableCaching Activa la funcionalidad de anotaciones de caché, generalmente en la clase de configuración principle.
@Cacheable Antes de la ejecución del método, consulta la caché; si existen datos, los retorna directamente, de lo contrario ejecuta el método y almacena el resultado en la caché.
@CachePut Inserta el valor de retorno del método en la caché, actualizando cuaqluier entrada existente con la misma clave.
@CacheEvict Elimina una o múltiples entradas de la caché según la clave especificada.

1. Configuración de Dependencias

La librería de Spring Cache es independiente del proveedor de caché, permitiendo alternar entre opciones como EHCache, Caffeine o Redis.


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>2.7.5</version>
</dependency>

2. Habilitación de Caching

La anotación @EnableCaching se aplica a la clase principal para activar el soporte de caché.


@Slf4j
@SpringBootApplication
@EnableCaching // Habilita el motor de caché
public class AplicacionDemo {
    public static void main(String[] args) {
        SpringApplication.run(AplicacionDemo.class, args);
        log.info("Servicio en ejecución.");
    }
}

3. Ejemplos de Uso con Anotaciones

Anotación @CachePut

Almacena el resultado del método en la caché. La clave puede definirse mediante expresiones Spring EL (SpEL).


/**
 * @CachePut: Persiste el retorno en la caché.
 * value: Espacio de nombres de la caché.
 * key: Expresión SpEL para la clave.
 */
@PostMapping("/registrar")
@CachePut(value = "productosCache", key = "#producto.id")
public Producto registrar(@RequestBody Producto producto) {
    repositorioProducto.guardar(producto);
    return producto;
}

Anotación @Cacheable

Realiza una consulta a la caché antes de ejecutar la lógica del método, retornando datos cacheados si están disponibles.


/**
 * @Cacheable: Gestiona la lectura desde la caché.
 * cacheNames: Identificador del caché.
 * key: Clave basada en parámetros.
 */
@GetMapping("/consultar/{id}")
@Cacheable(cacheNames = "productosCache", key = "#id")
public Producto obtenerPorId(@PathVariable Long id) {
    return repositorioProducto.buscarPorId(id).orElse(null);
}

Anotación @CacheEvict

Permite la invalidación selectiva de entradas en la caché.


@DeleteMapping("/eliminar/{id}")
@CacheEvict(cacheNames = "productosCache", key = "#id")
public void eliminar(@PathVariable Long id) {
    repositorioProducto.borrarPorId(id);
}

@DeleteMapping("/limpiar")
@CacheEvict(cacheNames = "productosCache", allEntries = true)
public void limpiarCacheCompleta() {
    repositorioProducto.eliminarTodos();
}

Etiquetas: spring-boot spring-cache caching Redis caffeine

Publicado el 6-5 04:12