2010-01-05 123 views
6

我有兴趣获取我正在运行的Ehcache的统计信息。
Ehcache通过关键字统计

我想查看一段时间内给定键的点击次数/未命中次数。也许是以地图的形式。例如。

对于传递小时(或然而长,它被运行)

密钥A有30次命中和2个未命中
密钥 B还400次命中和100个未命中
密钥 C具有2次命中和1个未命中
密钥d 有150次命中和未命中的10

我已通过文件搜索(SampledCacheStatisti CS,SampledCacheStatisticsImpl,SampledCacheStatisticsWrapper等),我正在度过这段可怕的时间。

是否有其他人有过实现这一点的经验?

任何帮助或想法都将非常感谢!

回答

9

EhCache Monitor给你这种类型的信息...... http://ehcache.org/documentation/monitor.html

编程访问可用如下:

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

太糟糕了兵马俑不提供这个免费了。您必须使用其商业产品才能使用ehCache监视器。 Bummer – 2014-10-06 17:30:08

+0

这不会给你每个键的统计。只是全球 – monzonj 2016-11-01 15:01:13

1

你不能每密钥的基础上,跟踪失误,因为统计数据存储在缓存中的对象上,并且如果存在未命中,则高速缓存中将没有元素来跟踪它。但是,如果你想有一个命中数在高速缓存所有键你需要做这样的事情:

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; 
} 

如果你宁愿看到聚集在整个高速缓存统计信息(或者你想跟踪失误),你可以在缓存上调用getStatistics()。请参阅http://ehcache.org/apidocs/net/sf/ehcache/Ehcache.html