2009-12-01 4 views
1

** 1. ** pour le cache de 2ème niveau, peut seulement définir une période de temporisation mais ne peut pas forcer l'actualisation/effacement du cache de l'entité? ou mettre annotation @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) comme l'actualisation automatique/effacer le cache chaque fois faire saveorupdate/mergeupdate? qu'est-ce que hibernateTemplate.flush() est lié à ça?Compréhension du cache d'hibernation de 2ème niveau


2. est-il bon pour activer le cache de niveau 2 pour toutes les entités? Quel est le délai moyen que vous utilisez pour ehcache pour ce cas si je ne veux pas trop de temps de mise en cache car je cache toutes les entités?

Répondre

1

1) Vous pouvez expulser manuellement des entités du cache de 2ème niveau si vous le devez. SessionFactory a plusieurs méthodes à cette fin; certains expulsent une instance unique d'une entité (ou d'une collection); d'autres expulsent toutes entités de classe donnée (ou nom d'entité/nom de rôle donné). Cela dit, vous normalement ne devrait pas avoir à faire cela - Hibernate garderait le cache mis à jour pour vous (sauf si vous faites des choses assez spécifiques comme les mises à jour SQL - auquel cas clarifiez votre question).

2) Généralement - non, il n'est pas bon de mettre en cache toutes les entités. C'est généralement une bonne idée de mettre en cache les entités immuables ainsi que celles qui sont fréquemment chargées/rarement mises à jour; En supposant que vous n'en ayez pas des tonnes. Mais encore une fois, cela dépend vraiment de ce que vous faites.

Timeout est une béquille (ou une sauvegarde si vous voulez) destinée à garder votre cache taille/état raisonnable, même si vous ne le faites pas. Une bonne stratégie de mise en cache ne devrait pas dépendre de cela.

Questions connexes