Ehcache按键统计

时间:2010-01-05 16:23:27

标签: caching statistics ehcache

我有兴趣获取我运行的Ehcache的统计数据。

我希望看到一段时间内给定密钥的点击次数/未命中次数。也许是以地图的形式。例如。

对于过去的小时(或者它已经运行多长时间)

  

Key A有30次点击,2次未命中   B有400次点击和100次未命中   C有2次命中,1次未命中   有150次点击和10次失误

我已经查看了文档(SampledCacheStatistics,SampledCacheStatisticsImpl,SampledCacheStatisticsWrapper等),我很难搞清楚这一点。

还有其他人有过实施这个的经验吗?

对此有任何帮助或想法将非常感谢!

2 个答案:

答案 0 :(得分: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());
    }

答案 1 :(得分: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