Annotations de Cache Spring

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();
}

Étiquettes: Spring Framework Cache Redis Annotations Spring EL

Publié le 19 septembre à 10h53