¿Qué hace spring-boot-cache?
Proporciona patrones para implementar caché en Spring Boot: configura proveedores Redis/Caffeine/EhCache con políticas TTL y de desalojo, aplica anotaciones @Cacheable/@CacheEvict/@CachePut, valida el comportamiento de aciertos/fallos de caché y expone métricas mediante Actuator. Útil para añadir caché a servicios Spring Boot, configurar expiración de caché, desalojar datos obsoletos o diagnosticar fallos de caché.
Proveedores Soportados
- Redis: Caché distribuida y persistente, ideal para entornos de microservicios.
- Caffeine: Caché en memoria de alto rendimiento para aplicaciones monolíticas o de baja latencia.
- EhCache: Caché en memoria con soporte para almacenamiento en disco y configuraciones complejas.
Configuración
Dependencia Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
Para Redis:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Configuración de Propiedades
spring.cache.type=redis
spring.cache.redis.time-to-live=10m
spring.cache.redis.cache-null-values=false
Anotaciones
@Cacheable
Almacena el resultado de un método en caché. En aciertos de caché, devuelve el valor almacenado sin ejecutar el método.
@Cacheable(value = "products", key = "#id")
public Product getProduct(Long id) {
// Lógica costosa
}
@CacheEvict
Elimina entradas de la caché.
@CacheEvict(value = "products", allEntries = true)
public void clearProductCache() {
// Lógica de negocio
}
@CachePut
Actualiza la caché sin interferir con la ejecución del método.
@CachePut(value = "products", key = "#product.id")
public Product updateProduct(Product product) {
return productRepository.save(product);
}
Validación de Caché
Para verificar aciertos/fallos, habilita el registro de depuración:
logging.level.org.springframework.cache=TRACE
Métricas con Actuator
Expone métricas de caché mediante:
management.endpoints.web.exposure.include=cache
Accede a /actuator/caches para ver estadísticas de aciertos, fallos y tamaños.
Ejemplo Completo
@Service
public class ProductService {
@Cacheable(value = "products", unless = "#result == null")
public Product getProduct(Long id) {
// Simular acceso a BD
return new Product(id, "Laptop", 1200.00);
}
@CacheEvict(value = "products", key = "#id")
public void deleteProduct(Long id) {
// Eliminar de BD
}
}
Políticas de Desalojo
| Proveedor | Política | Descripción |
|---|---|---|
| Redis | TTL | Expiración por tiempo |
| Caffeine | LRU | Desaloja el menos usado recientemente |
| EhCache | LFU | Desaloja el menos usado frecuentemente |