Ehcache中的“缓存未命中”和“内存缓存未命中”有啥区别?
Posted
技术标签:
【中文标题】Ehcache中的“缓存未命中”和“内存缓存未命中”有啥区别?【英文标题】:What is the difference between "cache misses" and "in memory cache misses" in Ehcache?Ehcache中的“缓存未命中”和“内存缓存未命中”有什么区别? 【发布时间】:2012-08-08 22:11:34 【问题描述】:我正在查看 EhCache 统计数据,我看到了这些数字:
缓存未命中:75977 缓存命中:38151
InMemoryCacheMisses:4843 InMemoryCacheHits: 38151
“内存”是唯一的存储 - 没有堆外存储和磁盘存储 (overflowToDisk="false", diskPersistent="false"
)。那么这两个是什么意思呢?我希望它们是相同的(命中相同),但未命中差异很大。
【问题讨论】:
【参考方案1】:你的缓存中有一些null
-valued Element
s 吗? (Ehcache 允许您将 Element
s 与 null
值一起存储,但我不确定是否有任何限制)。
看2.5.3版本Cache.searchInStoreWithStats(Object key)的代码,好像有bug:
确定是否增加inMemoryMisses
的测试使用containsKey()
导数,
而增加 cacheMisses
的测试会针对 get()
导数的结果进行空值检查。
因此,每次您搜索存在于InMemoryStore
中但具有null
值的键时,它会增加cacheMisses
而不是inMemoryMisses
。
所以,我可能完全不在,但我闻起来很香。你怎么看?
编辑:我意识到我的解释是错误的——元素不能为空,(但它的“值”可以为空)。无论如何我都会把这个答案留在这里,以防它触发任何其他想法
【讨论】:
我想几年前我注意到了同样的问题,但没有报告。再骗我! 注意:该方法在主干中仍然没有改变:svn.terracotta.org/svn/ehcache/trunk/ehcache/ehcache-core/src/… 好点。我不认为我有空值,但我会检查一下。我已将差异报告为问题,等待回复 你知道吗,我的怀疑是错误的!即使值为 null,该元素也不会为 null。无论如何,也许这个想法会为您带来更好的想法。祝你好运 @laher 或 Bozho 你们中的任何人都找到了这背后的原因,我的缓存遇到了类似的行为。缓存中的命中和未命中值相同,但只有一个 inMemoryMiss【参考方案2】:我相信您使用的是 ehcache 2.5+ 。如果您有磁盘持久性为 true 的缓存配置(尽管 overflowtodisk 为 false),它会写入磁盘。所以也可能有磁盘吗?您可以在统计中查看它们。你有diskpersistance是真的吗?请发布您的缓存配置
【讨论】:
两者都是假的。零磁盘命中和未命中以上是关于Ehcache中的“缓存未命中”和“内存缓存未命中”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章