Ce tutoriel explique comment mettre en place un système de cache dans une application Spring Boot pour améliorer les performances en évitant des opérations coûteuses, comme des appels à une base de données ou à des services externes.
@EnableCaching: Annotation à placer sur une classe de configuration pour activer l'abstraction de cache de Spring.CacheManager: L'interface centrale de l'abstraction de cache de Spring. Ce tutoriel utiliseConcurrentMapCacheManager, une implémentation simple basée sur uneConcurrentHashMap. Pour des cas d'usage plus avancés, on pourrait utiliser des gestionnaires de cache distribués comme Redis ou Ehcache.@Cacheable: Annotation qui indique que le résultat d'une méthode peut être mis en cache. Si une entrée est trouvée dans le cache pour les arguments donnés, le résultat mis en cache est retourné sans exécuter la méthode.@CachePut: Annotation qui met à jour le cache avec le résultat de la méthode. La méthode est toujours exécutée.@CacheEvict: Annotation qui supprime une ou plusieurs entrées du cache.
Ce projet met en place un cache pour un service de gestion de livres (BookService).
- La récupération d'un livre par son ISBN est mise en cache. Un appel lent à la base de données est simulé pour démontrer le gain de performance.
- La création ou la mise à jour d'un livre met également à jour l'entrée correspondante dans le cache.
- La suppression d'un livre invalide (supprime) l'entrée correspondante dans le cache.
CacheConfig: Configure leCacheManagerpour utiliser un cache nommé "books".BookService: Le service qui contient la logique métier et les annotations de cache (@Cacheable,@CachePut,@CacheEvict).BookController: Le contrôleur REST qui expose les endpoints pour interagir avec les livres.Book: L'entité JPA représentant un livre.
- Démarrez l'application.
- Utilisez un outil comme
curlou Postman. - Récupérez un livre pour la première fois :
Vous remarquerez un délai de 3 secondes (simulé) et les logs indiqueront que la méthode
curl http://localhost:8080/books/12345
findBookByIsbna été exécutée. - Récupérez le même livre une deuxième fois :
La réponse sera quasi instantanée, et les logs montreront que la méthode
curl http://localhost:8080/books/12345
findBookByIsbnn'a pas été exécutée. Le résultat provient directement du cache. - Mettez à jour le livre :
Le cache pour l'ISBN "12345" est mis à jour.
curl -X POST http://localhost:8080/books -H "Content-Type: application/json" -d '{"isbn": "12345", "title": "Nouveau Titre"}'
- Supprimez le livre :
Le cache pour l'ISBN "12345" est invalidé. Si vous essayez de le récupérer à nouveau, la méthode
curl -X DELETE http://localhost:8080/books/12345
findBookByIsbnsera exécutée.