Spring Cache

Тема дорожной карты · Spring Boot

Абстракция Spring Cache — это декларативный фреймворк кэширования, встроенный в Spring Boot, который отделяет логику кэширования от бизнес-кода, перехватывая аннотированные вызовы методов и сохраняя или извлекая результаты из настраиваемого провайдера кэша. Активация требует @EnableCaching на классе @Configuration; после этого @Cacheable("products") на методе @Service кэширует возвращаемое значение при первом вызове и возвращает кэшированную копию при последующих вызовах с тем же ключом, полностью обходя дорогостоящие вызовы JPA, Hibernate или удалённых API. @CachePut принудительно обновляет кэш при каждом вызове — полезно для паттернов сквозной записи — тогда как @CacheEvict удаляет записи при мутациях данных, а @Caching группирует несколько операций с кэшем в одном методе. Абстракция Spring Cache не зависит от провайдера: ConcurrentMapCacheManager авто-конфигурируется для локальной разработки, тогда как продакшн-развёртывания, как правило, переходят на Redis через spring-boot-starter-data-redis и RedisCacheManager для распределённого кэша, совместно используемого репликами Kubernetes. Абстракция интегрируется с Micrometer и Spring Boot Actuator через эндпоинт /actuator/caches, раскрывающий статистику кэша в реальном времени, включая коэффициенты попаданий, которые поступают в дашборды Prometheus и Grafana для планирования ёмкости.

Как это работает

Spring Cache покрывает cache + NoSQL + low-level access. @Cacheable + Spring Cache abstraction (Caffeine, Redis, EhCache) меморизируют результаты методов. Spring Data Redis — кеш, sessions, pub/sub, distributed locks. Spring Data MongoDB для document storage. JdbcTemplate для raw SQL, когда JPA мешает (read-heavy queries, сложные joins). Выбирайте правильный инструмент под паттерн — JPA не молоток.

Когда применять

Кешируйте reads, не writes. Local cache — Caffeine; distributed — Redis. Не кешируйте вечно — TTL + инвалидация на writes. Mongo когда document model подходит (event stores, content) — не уходите от реляционного по дефолту. JdbcTemplate быстрый + battle-tested, когда нужен контроль.

Типичные ошибки

Ловушки Spring Cache: @Cacheable на методах с mutable state (stale cache); нет eviction (кеш растёт без границ); Mongo "потому что NoSQL" без подходящей document model; raw SQL со string concat (SQL injection — parameter binding).

Связанные понятия

Полезные ресурсы