2010-01-05 2 views
6

Je suis intéressé à obtenir des statistiques sur le Ehcache que j'ai en cours d'exécution.
Ehcache Statistiques par clé

Je voudrais voir le nombre de hits/misses pour une clé donnée sur une période de temps. Peut-être sous la forme d'une carte. Par exemple.

Pour l'heure passée (ou le temps qu'il a été en cours d'exécution)

Key avait 30 coups sûrs et 2 misses
Key B avait 400 visites et 100 misses
Key C avait 2 résultats et 1 misses
clé D avait 150 coups sûrs et 10 misses

Je l'ai regardé à travers la documentation (SampledCacheStatisti cs, SampledCacheStatisticsImpl, SampledCacheStatisticsWrapper, etc) et j'ai du mal à comprendre cela.

Quelqu'un d'autre a-t-il déjà eu l'expérience de la mise en œuvre?

Toute aide ou des idées sur ce serait grandement apprécié!

Répondre

9

Le EhCache Monitor vous donne ce type d'information ... http://ehcache.org/documentation/monitor.html

accès est disponible Programmatic comme suit:

CacheManager cacheManager = CacheManager.getInstance(); 
    String[] cacheNames = cacheManager.getCacheNames(); 
    for (int i = 0; i < cacheNames.length; i++) { 
     String cacheName = cacheNames[i]; 
     System.out.println(cacheName+" - "+ cacheManager.getCache(cacheName).getStatistics().toString()); 
    } 
+0

Dommage que Terracotta ne le propose plus gratuitement. Vous devez aller avec leur produit commercial pour utiliser le moniteur ehCache. Bummer –

+0

Cela ne vous donne pas les statistiques par clé. Juste global – monzonj

1

Vous ne pouvez pas suivre misses sur une base par clé parce que les statistiques sont stocké sur l'objet dans le cache et s'il y avait un manque, il n'y aurait aucun élément dans le cache pour le suivre. Mais si vous voulez un coup-comptage pour toutes les clés dans un cache, vous aurez besoin de faire quelque chose comme:

public Map<Object,long> getKeyHits(Ehcache cache) 
{ 
    Map<Object,long> hitMap = new HashMap<Object,long>(); 
    Map<Object,Element> allElements = cache.getAll(cache.getKeys()); 
    for (Object key : allElements.keySet()) 
    { 
    hitMap.put(key, allElements.get(key).hitCount()); 
    } 
    return hitMap; 
} 

Si vous préférez voir les statistiques agrégées sur un cache entier (ou que vous souhaitez suivre misses), vous pouvez appeler getStatistics() sur le cache. Voir http://ehcache.org/apidocs/net/sf/ehcache/Ehcache.html.