2010-11-02 4 views
5

Salut: Je suis confus au sujet de ce qui est mis en cache par le cache d'hibernation. De la docs, je sais qu'il y a des types de cache en hibernation.Que sauvegarde le cache Hibernate?

Premier niveau: le niveau transactionnel. Il semble que l'entité à persister par une session soit mise en cache ici.

Cache de second niveau: Je n'ai vraiment aucune idée de ce cache, de l'API, il a dit que ce cache fonctionne au niveau de la sessionfactory ... Je ne comprends pas.

Cache de requête: Ceci est facile à comprendre pour moi (peut-être que je me trompe). Il met en cache le paramètre de requête avec l'entité associée.

C'est tout ce que je sais sur le cache en veille prolongée.

Quelqu'un peut-il me donner plus de détails?

BTW, je ne suis pas bon au travail sql/jdbc, donc je veux aussi savoir comment devrais-je savoir sur le sql/jdbc pour en savoir plus sur hibernate (tout docs?)? Je ne veux pas être juste un utilisateur d'hibernation puisque c'est juste un outil, ce que je veux, c'est apprendre quelque chose de ce merveilleux cadre. :)

Répondre

3

premier niveau Cache

Ce cache est activé par défaut. Lorsque NHibernate charge une entité par son identifiant unique à partir de la base de données, elle est automatiquement placée dans la carte d'identité. Cette carte d'identité représente le cache de premier niveau.

La durée de vie du cache de premier niveau est couplée à la session en cours. Dès que la session en cours est fermée, le contenu du cache de premier niveau respectif est effacé. Une fois qu'une entité est dans le cache de premier niveau, une opération ultérieure qui veut charger la même entité dans la session en cours récupère cette entité à partir du cache et aucun retour à la base de données n'est nécessaire. L'une des raisons principales derrière cette carte d'entité est d'éviter la situation que deux instances différentes dans la mémoire peuvent représenter le même enregistrement (ou entité) de base de données.

(adapté de NH FAQ)

cache de second niveau

Ce cache est au-dessus du cache de portée de session unique. Avec ce cache, vous économisez de nombreux tours vers la base de données, puisque la première fois que quelqu'un dans une session charge l'entité déterminée, il reste dans le cache, donc la requête suivante (de toute autre session) l'obtiendra du cache.

Pour utiliser le cache L2, vous aurez besoin d'un fournisseur de cache, tel que SysCache ou Memcache. Ces types stockent les valeurs des entités mises en cache en tant que tables os hachées par l'ID de l'entité. Il est important de noter que ce n'est pas l'objet .net qui est mis en cache, mais seulement ses valeurs.

Il est dit qu'il est lié à la fabrique de sessions car le cache fonctionnera pour les sessions créées par une fabrique de sessions déterminée, de sorte que les sessions créées par différentes usines de sessions ne partageront pas le cache. Le concept d'une usine de sessions est-il clair pour vous?

cache de requêtes

Celui-ci est très simple, mais il y a un hic. Il mettra en cache la requête et ses paramètres, mais ne mettra pas en cache les entités renvoyées. Il mettra seulement en cache leurs identifiants, donc cela n'a de sens qu'avec le cache L2, car il contient les valeurs associées à cet identifiant.

entrée FAQ NHiernate à propos du cache:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

+0

Merci, votre réponse est assez utile !! Je suis un peu clair maintenant. BTW, des documents sur la base de données liés à en savoir plus sur le hibernate? – hguser

+0

Je vous suggère d'acheter Hibernate En action: http://www.amazon.com/Hibernate-Action-Christian-Bauer/dp/193239415X – Pedro

Questions connexes