2012-08-08 93 views
7

我期待在了Ehcache統計,我看到這些數字:Ehcache中「緩存未命中」和「內存緩存未命中」有什麼區別?

CacheMisses:75977個
CacheHits:38151

InMemoryCacheMisses:4843
InMemoryCacheHits:38151

「記憶「是唯一的商店 - 沒有堆放和沒有磁盤存儲(overflowToDisk="false", diskPersistent="false")。那麼這兩個意思是什麼?我希望他們是一樣的(命中是一樣的),但失誤很大。

回答

0

我相信你使用的是ehcache 2.5+。如果您的磁盤配置爲diskpersistance爲true(儘管overflowtodisk爲false),它將寫入磁盤。那麼可以有diskhits?您可以在統計信息中查看它們。你真的有磁盤空間嗎?請發佈您的緩存配置

+0

都是錯誤的。零磁盤命中和未命中 – Bozho 2012-08-10 20:21:30

1

您的緩存中是否有一些null-評估Element? (Ehcache允許您將Elementnull的值一起存儲,但我不確定是否有任何約束)。

尋找在2.5.3版本Cache.searchInStoreWithStats(Object key)的代碼,它似乎有有一個錯誤:而測試

  • 測試確定是否遞增inMemoryMisses使用containsKey()衍生物,
  • get()衍生物的結果遞增cacheMisses空檢查。

所以,在每次搜索中存在的InMemoryStore但有一個null價值的關鍵時候,它會增加cacheMisses但不inMemoryMisses

所以,我可能完全沒有,但它聞起來對我來說是正確的。你怎麼看?

編輯:我意識到我的解釋是錯誤的 - 元素不能爲空,(但它的'值'可以爲空)。無論如何,我會在這裏留下這個答案,因爲它觸發任何其他想法

+0

我想我在幾年前注意到同樣的問題,並沒有報告。更傻了我! – laher 2012-08-15 09:11:53

+0

注意:該方法在trunk中仍然沒有變化:http://svn.terracotta.org/svn/ehcache/trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/Cache.java – laher 2012-08-15 09:21:06

+0

好點子。我不認爲我有空值,但我會檢查。我已經將這個差異報告爲一個問題,等待回覆 – Bozho 2012-08-15 11:12:42