2011-08-29 2 views
4

Comment forcer la relecture des données db (sans expulser le cache de second niveau avant la lecture), puis le mettre en cache.Comment rafraîchir le cache de second niveau?

Le cas d'utilisation est comme suit:

Il y a un service qui utilise les données du dictionnaire. Le service connaît une charge élevée, donc la performance est le must. Je voudrais que les données du dictionnaire soient toujours disponibles dans le cache de second niveau pour le service. Les données du dictionnaire peuvent être modifiées de manière externe, de sorte que le cache doit être actualisé périodiquement.

Est-il possible d'actualiser le cache de deuxième niveau de telle sorte que les autres clients de SessionFactory ne provoquent pas un hit sur db (obtiendront les anciens éléments pendant la lecture des données mises à jour).

ehcache est utilisé comme fournisseur de cache, mais il peut être raisonnablement modifié.

+0

Comment avez-vous au sujet de la mise en œuvre CacheMode.REFRESH? Est-ce que vous venez de le mettre dans la Session, et Hibernate se met automatiquement à jour? –

+0

@JoseChavez J'ai fait: session.setCacheMode (CacheMode.REFRESH) et ensuite fait une demande via Hibernate pour les données dont j'ai besoin d'être rafraîchi dans cette session. https://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#setCacheMode(org.hibernate.CacheMode) – Andrey

Répondre

4

De temps en temps, pour provoquer une lecture de la base de données, vous pouvez définir CacheMode sur la session à REFRESH - les données seront extraites de la base de données pour ce client et toutes les mises à jour ajoutées à la seconde. niveau de cache. Les autres clients interrogeant en utilisant le mode de cache normal liront à partir du cache de second niveau sans toucher à la base de données.

Voir CacheMode

+0

Merci! Je ne sais pas comment je n'ai pas trouvé ça tout seul. – Andrey

Questions connexes