我有兴趣获取我运行的Ehcache的统计数据。
我希望看到一段时间内给定密钥的点击次数/未命中次数。也许是以地图的形式。例如。
对于过去的小时(或者它已经运行多长时间)
Key A有30次点击,2次未命中 B有400次点击和100次未命中 C有2次命中,1次未命中 有150次点击和10次失误
我已经查看了文档(SampledCacheStatistics,SampledCacheStatisticsImpl,SampledCacheStatisticsWrapper等),我很难搞清楚这一点。
还有其他人有过实施这个的经验吗?
对此有任何帮助或想法将非常感谢!
答案 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。