Annotations pour Travailler avec le Cache
Au lieu de gérer manuellement la mise en cache, il est possible d'utiliser des annotations qui automatisent ce processus. Examinons les annotations disponibles.
Mise en cache des résultats
L'annotation @Cacheable s'applique aux méthodes dont les résultats doivent être mis en cache. Lorsqu'une méthode est appelée à nouveau avec les mêmes paramètres, le résultat est récupéré depuis le cache.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
Dans cet exemple, la méthode getUserById met en cache le résultat d'une requête utilisateur par son ID dans un cache nommé "usersCache". Si la méthode est appelée de nouveau avec le même userId, les données sont récupérées depuis le cache au lieu d'exécuter la requête sur la base de données.
Mise à jour du cache
L'annotation @CachePut met à jour le cache à chaque exécution de la méthode, que le résultat ait déjà été mis en cache ou non.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
L’annotation @CachePut est utilisée pour mettre à jour le cache à chaque appel de la méthode updateUser. Ceci est utile lorsque les données changent et qu’il est nécessaire de synchroniser le cache avec les modifications dans la base de données. Le cache est mis à jour avec la clé correspondant à l’ID utilisateur.
Nettoyage du cache
L’annotation @CacheEvict est utilisée pour supprimer des données du cache, par exemple lorsqu’un utilisateur est supprimé de la base de données.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
Dans cet exemple, la méthode deleteUser supprime l'entrée du cache dont la clé est égale à userId.
Opérations de cache combinées
L'annotation @Caching permet d'effectuer plusieurs opérations de cache au sein d'une seule méthode, en combinant @CachePut et @CacheEvict.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
Dans cet exemple, la méthode updateUser met à jour simultanément le cache avec le nouvel état de l'utilisateur à l'aide de @CachePut et supprime l'ancienne entrée du cache à l'aide de @CacheEvict. Ceci est utile lorsque plusieurs opérations de cache doivent être effectuées en même temps.
1. Quand utiliseriez-vous @CacheEvict ?
2. Quel est le but de l'annotation @CachePut ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 3.33
Annotations pour Travailler avec le Cache
Glissez pour afficher le menu
Au lieu de gérer manuellement la mise en cache, il est possible d'utiliser des annotations qui automatisent ce processus. Examinons les annotations disponibles.
Mise en cache des résultats
L'annotation @Cacheable s'applique aux méthodes dont les résultats doivent être mis en cache. Lorsqu'une méthode est appelée à nouveau avec les mêmes paramètres, le résultat est récupéré depuis le cache.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
Dans cet exemple, la méthode getUserById met en cache le résultat d'une requête utilisateur par son ID dans un cache nommé "usersCache". Si la méthode est appelée de nouveau avec le même userId, les données sont récupérées depuis le cache au lieu d'exécuter la requête sur la base de données.
Mise à jour du cache
L'annotation @CachePut met à jour le cache à chaque exécution de la méthode, que le résultat ait déjà été mis en cache ou non.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
L’annotation @CachePut est utilisée pour mettre à jour le cache à chaque appel de la méthode updateUser. Ceci est utile lorsque les données changent et qu’il est nécessaire de synchroniser le cache avec les modifications dans la base de données. Le cache est mis à jour avec la clé correspondant à l’ID utilisateur.
Nettoyage du cache
L’annotation @CacheEvict est utilisée pour supprimer des données du cache, par exemple lorsqu’un utilisateur est supprimé de la base de données.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
Dans cet exemple, la méthode deleteUser supprime l'entrée du cache dont la clé est égale à userId.
Opérations de cache combinées
L'annotation @Caching permet d'effectuer plusieurs opérations de cache au sein d'une seule méthode, en combinant @CachePut et @CacheEvict.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
Dans cet exemple, la méthode updateUser met à jour simultanément le cache avec le nouvel état de l'utilisateur à l'aide de @CachePut et supprime l'ancienne entrée du cache à l'aide de @CacheEvict. Ceci est utile lorsque plusieurs opérations de cache doivent être effectuées en même temps.
1. Quand utiliseriez-vous @CacheEvict ?
2. Quel est le but de l'annotation @CachePut ?
Merci pour vos commentaires !