1. Composants et ennotations principales
- Cache : Interface définissant les opérations de cache
- CacheManager : Gestionnnaire des composants de cache
- @Cacheable : Met en cache le résultat d'une méthode
- @CachePut : Met à jour le cache après exécution
- @CacheEvict : Supprime des entrées du cache
- @EnableCaching : Active le système de cache
2. Utilisation de @Cacheable
Cette annotation permet de stocker le résultat d'une méthode pour les appels suivants avec les mêmes paramètres.
2.1 Attribut cacheNames
Spécifie le ou les caches où stocker les résultats :
@Cacheable(cacheNames = "utilisateurs")
public Utilisateur trouverUtilisateur(String identifiant) {
return repository.recuperer(identifiant);
}
@Cacheable(cacheNames = {"cache1", "cache2"})
public String obtenirDonnees() {
return "contenu";
}
2.2 Génération de clés
Personnalisation de la clé de cache avec des expressions Spring EL :
@Cacheable(value = "produits", key = "#reference")
public Produit trouverProduit(String reference) {
return catalogue.chercher(reference);
}
@Cacheable(value = "commandes", key = "#p0")
public Commande trouverCommande(Long numero) {
return serviceCommande.recuperer(numero);
}
@Cacheable(value = "profils", key = "#utilisateur.id")
public Profil obtenirProfil(Utilisateur utilisateur) {
return profilService.charger(utilisateur.getId());
}
2.3 Conditions de cache
@Cacheable(condition = "#age > 18")
public List<Contenu> obtenirContenuAdulte(int age) {
return service.contenuAdulte();
}
@Cacheable(unless = "#result == null")
public Configuration chargerConfig(String nom) {
return configService.recuperer(nom);
}
3. Mise à jour avec @CachePut
Important : utiliser la même stratégie de clé que pour la lecture :
@Cacheable(value = "profils", key = "#id")
public Profil consulterProfil(String id) {
return profilRepository.trouver(id);
}
@CachePut(value = "profils", key = "#profil.id")
public Profil modifierProfil(Profil profil) {
return profilRepository.sauvegarder(profil);
}
4. Suppression avec @CacheEvict
4.1 Suppression par clé
@CacheEvict(value = "sessions", key = "#token")
public void invaliderSession(String token) {
sessionService.supprimer(token);
}
4.2 Vidage complet
@CacheEvict(value = "statistiques", allEntries = true)
public void reinitialiserCache() {
statistiquesService.nettoyer();
}