Какой у вас опыт работы с Spring Cache?

«Какой у вас опыт работы с Spring Cache?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Опыт работы с Spring Cache включает настройку и использование абстракции кэширования для оптимизации производительности приложений.

Основные возможности и практики:

  1. Декларативное кэширование с помощью аннотаций:

    • @Cacheable – кэширует результат метода.
    • @CachePut – обновляет кэш (например, при сохранении).
    • @CacheEvict – удаляет данные из кэша (например, при удалении).
    • @Caching – группировка нескольких операций с кэшем.
  2. Интеграция с различными провайдерами: Ehcache, Caffeine, Redis, Hazelcast.

  3. Настройка ключей кэширования (SpEL), условий и TTL.

Пример использования в Spring Boot сервисе:

@Service
public class ProductService {
    @Cacheable(value = "products", key = "#id", unless = "#result == null")
    public Product getProductById(Long id) {
        // Дорогой вызов к БД выполняется только при промахе кэша
        return productRepository.findById(id).orElse(null);
    }

    @CachePut(value = "products", key = "#product.id")
    public Product updateProduct(Product product) {
        // Обновляем БД и кэш одновременно
        return productRepository.save(product);
    }

    @CacheEvict(value = "products", key = "#id")
    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

Конфигурация в application.yml для использования Caffeine:

spring:
  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=500, expireAfterWrite=10m

Почему это важно: Spring Cache абстрагирует работу с кэшем, позволяя легко менять провайдера и применять кэширование без изменения бизнес-логики, что значительно ускоряет работу приложения при повторяющихся запросах.