Ehcache中“缓存未命中”和“内存缓存未命中”之间有什么区别?

时间:2012-08-08 22:11:34

标签: java ehcache

我正在查看EhCache统计数据,我看到这些数据:

  

CacheMisses:75977
  CacheHits:38151

     

InMemoryCacheMisses:4843
  InMemoryCacheHits:38151

“memory”是唯一的商店 - 没有堆外和没有磁盘存储(overflowToDisk="false", diskPersistent="false")。那么这两个意味着什么呢?我希望它们是相同的(命中是相同的),但是失误差别很大。

2 个答案:

答案 0 :(得分:1)

您的缓存中是否有null个值Element? (Ehcache允许您存储Elementnull值,但我不确定是否存在任何限制。

查看2.5.3版本中Cache.searchInStoreWithStats(Object key)的代码,似乎有一个错误:

  • 确定是否增加inMemoryMisses的测试使用containsKey()衍生物,
  • 而针对cacheMisses派生词的结果递增get()空值的测试。

因此,每当您搜索InMemoryStore中存在但具有null值的密钥时,它将增加cacheMisses但不会增加inMemoryMisses

所以,我可能会完全离开,但它对我来说闻起来很香。你觉得怎么样?

编辑:我意识到我的解释是错误的 - 元素不能为空,(但它的'value'可以为null)。无论如何,我会在这里留下这个答案,因为它会引发任何其他想法

答案 1 :(得分:0)

我相信您使用的是ehcache 2.5+。如果您将diskpersistance的cacheconfiguration设置为true(尽管overflowtodisk为false),则会写入磁盘。那么也可能有磁盘?您可以在统计信息中查看它们。你有discpersistance真实吗?请发布您的缓存配置