EHCache comment vérifier si quelque chose est dans le cache ou pas?
Est-il un moyen de vérifier si un objet est à l'intérieur d'un EHCache géré cache?
Le défi que je face, c'est que j'ai mis en œuvre une méthode qui récupère une valeur unique de la base de données (find(clé) de la méthode). Le résultat de cette méthode de recherche est joliment mis en cache par EHCache, mais maintenant, je veux réduire le nombre de requêtes sql qui sont le résultat de l'appel de la méthode plusieurs fois.
Afin de les atteindre cet objectif nous avons mis en œuvre une nouvelle méthode qui comme argument prend une liste de clés, mais que l'argument est différent pour chaque appel de méthode EHCache fait un mauvais travail sur la mise en cache des résultats.
EHCache utilisé les paramètres de la méthode en tant que point d'entrée dans le cache.
Donc, je tiens à re-concevoir les choses. L'idée était que je prends les arguments de la trouver(la liste des touches de méthode, d'exécuter une grande requête sql, puis farcir les résultats à l'intérieur de la cache, je n'ai pas enveloppé ma tête autour de lui, mais après avoir écrit ce qu'elle ressent en modifiant manuellement le cache de la sla est un no go..
Aucune indication ou des indications sont appréciées!
Que voulez-vous dire, "à l'intérieur"? Comme une clé, ou comme une valeur?
OriginalL'auteur Marco | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
peut-être isKeyInCache?
La javadoc est très clair sur ce - "étant donné qu'aucune des affirmations sont faites à propos de l'état de l'Élément, il est possible que l'Élément est expiré, mais cette méthode renvoie toujours vrai."
oui, malheureusement, j'ai lu les docs /après/ I avait été brûlée par elle et a trouvé mon problème de configuration en essayant de sauver de la misère 🙂
c'est à peu près vrai à propos de aucun simultanées cache de mise en œuvre: juste parce que vous le voyez maintenant, ne signifie pas qu'il sera là plus tard.
Je ne pense pas qu'il n'y a rien de mal à vérifier que quelque chose est dans le cache. juste être conscient que, selon la façon dont le cache est configuré, quelque chose peut-être dans le cache d'une minute et disparu.
OriginalL'auteur jtahlborn
Il est possible d'accéder à la hibernate statistiques + ehcache stats etc via jmx. EhcacheHibernateMBean est l'interface principale qui expose toutes les API via jmx. Essentiellement, il s'étend de deux interfaces -- EhcacheStats et HibernateStats. Et comme son nom l'indique EhcacheStats contient des méthodes liées à Ehcache et HibernateStats liée avec la veille prolongée. Vous pouvez voir cache hit/miss/taux, changer de configuration de l'élément de valeurs dynamiquement -- comme maxElementInMemory, TTI, TTL, activer/désactiver la collecte des statistiques etc et diverses autres choses. Ceci peut être réalisé à votre demande en substituant buildSessionFactory() la méthode sur LocalSessionFactoryBean par l'ajout de tc.actif en tant que "vrai" Système de la propriété lorsque le cache de second niveau est activé dans Hibernate
Pas lorsque vous accédez à votre application via JMX, accédez à l'onglet Mbeans , sur la gauche, allez à la net.sf.ehcache.hibernate --> net.sf.ehcache.Cachemanager@..
En vertu du présent aller à des attributs.
Cliquez sur les attributs, sur le côté droit, inspecter RegionCacheAttriutes.
Note : Le point de vue a changé avec le JDK1.7 . Après l'enregistrement dans JMX Console, accédez à net.sf.ehcache.hibernate sous l'onglet Mbeans. Cliquez sur le CacheRegionStats cliquez sur ouvrir afficher l'écran sur la droite. Double-cliquez dans la section supérieure et le tableau de navigation comme indiqué ci-dessous. Vous aurez à naviguer dans le tableau de navigation pour trouver le nombre de n'importe quel objet qui vous intéresse.
OriginalL'auteur vsingh
Avez-vous regardé
SelfPopulatingCache and or BlockingCache
? Ils vont bloquer tous les demandeurs d'après une db récupérer est lancé jusqu'à ce que le cache est rempliOriginalL'auteur Steven Harris