🎯 Как быстро настроить кеширование в Spring Boot
Писать кеш руками через HashMap или страдать с вручную настроенными TTL — скучно, долго и ненадёжно. В Spring Boot всё уже готово: включаем, настраиваем, и поехали!
1️⃣ Добавляем зависимость
org.springframework.boot
spring-boot-starter-cache
ИЛИ
implementation 'org.springframework.boot:spring-boot-starter-cache'
2️⃣ Включаем кеширование
Добавляем простую аннотацию над главным классом приложения (или конфиг классом):
@SpringBootApplication
@EnableCaching
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
3️⃣ Кешируем методы сервисов
Используем аннотацию @Cacheable на тех методах, которые часто выполняются и редко меняются:
@Service
public class UserService {
@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
simulateSlowService();
return userRepository.findById(id).orElseThrow();
}
private void simulateSlowService() {
Thread.sleep(3000);
}
}
Теперь при повторном вызове метода с тем же параметром ответ прилетит мгновенно.
4️⃣ Настройка TTL и конфигурация кеша
В Spring Boot по умолчанию используется простой ConcurrentMap (без TTL). Если хочешь TTL и прочие плюшки, подключайте Caffeine:
spring:
cache:
type: caffeine
caffeine:
spec: maximumSize=500,expireAfterAccess=10m
Кеш будет жить максимум 10 минут и не разрастаться до бесконечности.
5️⃣ Очистка кеша
Если нужно принудительно почистить кеш после обновления данных, используем @CacheEvict:
@CacheEvict(value = "users", key = "#id")
public void updateUser(Long id, User updatedUser) {
userRepository.save(updatedUser);
}
💬 Хранили когда-нибудь кеш в мапе?
🐸
Библиотека джависта #буст