J'ai du mal à comprendre quand la mise en veille prolongée atteint le cache de deuxième niveau et quand cela invalide-t-il le cache.
Voici ce que je comprends actuellement:
- Le cache de deuxième niveau stocke les entités entre les sessions, la portée est la SessionFactory
- Vous devez dire quelles entités mettre en cache, aucune entité ne sera mise en cache par défaut
- Le cache des requêtes stocke les résultats des requêtes dans le cache.
Ce que je ne comprends pas, c'est
- Quand la mise en veille prolongée atteint-elle ce cache?
- Disons que j'ai configuré le cache de deuxième niveau mais pas la mise en cache des requêtes. Je veux mettre en cache mes clients, il y en a 50000. De quelles manières puis-je récupérer les clients du cache?
- Je suppose que je peux les obtenir par identifiant à partir du cache. Ce serait facile mais pas digne de la mise en cache. Mais que faire si je veux faire des calculs avec tous mes clients. Disons que je souhaite afficher une liste des clients, comment puis-je y accéder?
- Comment puis-je obtenir tous mes clients si la mise en cache des requêtes est désactivée?
- Que se passerait-il si quelqu'un mettait à jour l'un des clients?
- Ce client serait-il invalidé dans le cache ou tous les clients seraient-ils invalidés?
Ou est-ce que je pense que la mise en cache est totalement erronée? Quelles seraient les utilisations les plus appropriées du cache de deuxième niveau dans ce cas? La documentation de mise en veille prolongée n'est pas du tout claire sur le fonctionnement du cache dans la réalité. Il n'y a que des instructions sur la façon de le configurer.
Mise à jour: J'ai donc compris que le cache de deuxième niveau (sans cache de requête) serait bon pour charger des données par identifiant. Par exemple, j'ai un objet utilisateur pour lequel je souhaite vérifier les autorisations dans chaque demande d'une application Web. Serait-ce un bon cas pour réduire l'accès à la base de données en mettant l'utilisateur en cache dans le cache de deuxième niveau? Comme si je stockais l'identifiant de l'utilisateur dans la session ou n'importe où et quand je devais vérifier les autorisations, je chargerais l'utilisateur par son identifiant et vérifierais les autorisations.