我正在查看 EhCache 统计信息,我看到了这些数字:
缓存未命中:75977 缓存
命中:38151InMemoryCacheMisses:4843
InMemoryCacheHits:38151
“内存”是唯一的存储——没有堆外存储,也没有磁盘存储(overflowToDisk="false", diskPersistent="false"
)。那么这两个是什么意思呢?我希望它们是相同的(命中相同),但未命中差异很大。
你的缓存中有一些null
-valued吗?Element
(Ehcache 允许您将Element
s 与null
值一起存储,但我不确定是否有任何限制)。
查看 2.5.3 版本中Cache.searchInStoreWithStats(Object key)的代码,似乎那里有一个错误:
inMemoryMisses
使用containsKey()
导数,cacheMisses
空值检查的测试get()
。因此,每次您搜索存在于 中InMemoryStore
但具有null
值的键时,它将递增cacheMisses
但不递增inMemoryMisses
。
所以,我可能完全不在了,但我闻起来很香。你怎么看?
编辑:我意识到我的解释是错误的——元素不能为空,(但它的“值”可以为空)。无论如何我都会在这里留下这个答案,以防它触发任何其他想法
我相信您正在使用 ehcache 2.5+ 。如果您有磁盘持久性为 true 的缓存配置(尽管 overflowtodisk 为 false),它会写入磁盘。所以也可能有磁盘吗?您可以在统计中查看它们。你有diskpersistance是真的吗?请发布您的缓存配置