Guava Cache CacheStats全为零

时间:2014-08-22 08:04:16

标签: java caching guava

我正在使用Guava Cache lib,我想检查缓存的统计信息,这是我的代码:

refreshCache = CacheBuilder.newBuilder()
           .refreshAfterWrite(1, TimeUnit.MINUTES)
           .maximumSize(5)
           .recordStats()
           .build(
               new CacheLoader<String, Map<String,Object>>() {
                 public Map<String,Object> load(String key) throws Exception {
                     loader();
                 }
               });
        stats = refreshCache.stats();
        delta = refreshCache.stats()
                .minus(stats);

}

 logger.info("Stats:{}",stats);
 logger.info("delta:{}",delta);

我已调用recordeStats()来激活统计数据,但是当我打印统计数据时,它全部为0。enter image description here

4 个答案:

答案 0 :(得分:29)

您忘记通过将recordStats()添加到CacheBuilder.newBuilder()来激活缓存记录。

答案 1 :(得分:6)

根据JavaDoc:

缓存统计信息根据以下规则递增:

  • 当缓存查找遇到现有缓存条目时,hitCount会递增。
  • 当缓存查找首次遇到丢失的缓存条目时,会加载新条目。
  • 成功加载条目后,missCount和loadSuccessCount递增,总加载时间(以纳秒为单位)添加到totalLoadTime。
  • 当加载条目时抛出异常时,missCount和loadExceptionCount会递增,并且总加载时间(以纳秒为单位)会添加到totalLoadTime。
  • 遇到仍在加载的丢失缓存条目的缓存查找将等待加载完成(无论是否成功),然后增加missCount .--
  • 当一个条目从缓存中逐出时,evictionCount会递增。
  • 当缓存条目无效或手动删除时,不会修改任何统计信息。
  • 在缓存的asMap视图中调用的操作不会修改任何统计信息。

查找特别定义为调用其中一个方法LoadingCache.get(Object),LoadingCache.getUnchecked(Object),Cache.get(Object,Callable)或LoadingCache.getAll(Iterable)。

答案 2 :(得分:2)

在您的代码中,您在获取其统计信息之前实际上并未使用缓存...为什么统计数据全部为0会令人惊讶?

答案 3 :(得分:2)

您无法实例化统计信息()。它是一个工厂,它将缓存值复制到最终统计信息。 所以请在运行时使用logger.info(refreshCache.stats())。