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 Elements 吗? (Ehcache 允许您将 Elements 与 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中的“缓存未命中”和“内存缓存未命中”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别

5 分钟快速学习,缓存一致性优化方案!

总缓存未命中数少于数据缓存未命中数 (PAPI_L1_DCM > PAPI_L1_TCM)

高并发情况利用锁机制处理缓存未命中

分析例程的缓存未命中

代码分析器哪些参数显示缓存未命中?