我正在使用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。
答案 0 :(得分:29)
您忘记通过将recordStats()
添加到CacheBuilder.newBuilder()
来激活缓存记录。
答案 1 :(得分:6)
根据JavaDoc:
缓存统计信息根据以下规则递增:
查找特别定义为调用其中一个方法LoadingCache.get(Object),LoadingCache.getUnchecked(Object),Cache.get(Object,Callable)或LoadingCache.getAll(Iterable)。
答案 2 :(得分:2)
在您的代码中,您在获取其统计信息之前实际上并未使用缓存...为什么统计数据全部为0会令人惊讶?
答案 3 :(得分:2)
您无法实例化统计信息()。它是一个工厂,它将缓存值复制到最终统计信息。 所以请在运行时使用logger.info(refreshCache.stats())。