J'essaie d'ajouter la mise en cache à une application CRUD, j'ai commencé à faire quelque chose comme ceci:
@Cacheable("users")
List<User> list() {
return userRepository.findAll()
}
@CachePut(value = "users", key = "#user.id")
void create(User user) {
userRepository.create(user)
}
@CachePut(value = "users", key = "#user.id")
void update(User user) {
userRepository.update(user)
}
@CacheEvict(value = "users", key = "#user.id")
void delete(User user) {
userRepository.delete(user)
}
Le problème que j'ai est que j'aimerais que les opérations de création/mise à jour/suppression puissent mettre à jour les éléments déjà stockés dans le cache pour l'opération list()
(notez que list()
ne tire pas de la base de données mais un moteur de données), mais je ne suis pas en mesure de le faire.
Je voudrais mettre en cache tous les éléments retournés par list()
individuellement afin que toutes les autres opérations puissent mettre à jour le cache en utilisant #user.id
. Ou peut-être, effectuez toutes les opérations pour mettre à jour la liste déjà stockée dans le cache.
J'ai lu que je pouvais expulser tout le cache lors de sa mise à jour, mais je veux éviter quelque chose comme:
@CacheEvict(value = "users", allEntries=true)
void create(User user) {
userRepository.create(user)
}
Existe-t-il un moyen de créer/mettre à jour/supprimer des valeurs dans une collection mise en cache? Ou pour mettre en cache toutes les valeurs d'une collection en tant que clés individuelles?
Encore une fois, ce n'est pas la première fois que cette question est posée.
Et encore une fois, la réponse est la même.
Je soupçonne que l'un des liens vous aidera, mais commencez peut-être par # 3.
À la vôtre, John