2015-09-04 71 views
0

我正在使用番石榴緩存並在下面打印。 loadSuccessCount和totalLoadTime始終爲零。番石榴 - Google緩存 - loadSuccessCount始終爲0

CacheStats {hitCount = 0,missCount = 13,loadSuccessCount = 0, loadExceptionCount = 0,totalLoadTime = 0,evictionCount = 6}

最初,所有都是0和I開始記錄的統計信息。仍然loadSuccessCount爲零。它應該返回Cache查找方法成功加載新值的次數。

請幫忙,爲什麼這是不給正確的價值。

代碼:

com.google.common.cache.Cache<Object, Object> newCache = CacheBuilder.from(configurations).recordStats().build(); 

public void put(String key, Object o) {  
    newCache.put(key,o);  
} 

public Object get(String key) {  
    Object o = newCache.getIfPresent(key);  
    return o ; 
} 

更新:

在統計,loadSuccessCount,loadExceptionCount,totalLoadTime - 這些是適用於LoadingCache。不適用於我正在使用的簡單緩存。

+0

看看其他值'hitCount = 0,missCount = 13'。有些事情不對。 –

+1

我們不能說某些代碼應該做什麼,爲什麼它以某種方式行爲,而沒有看到任何代碼行。發佈重現此問題的代碼。 –

+0

@JB Nizet我已經添加了緩存構建器並獲取,放置方法代碼。 – Vaandu

回答

3

您發佈的代碼永遠不會讓裝載負載任何東西:

  • 第一種方法把給定的對象到緩存中,給定項下。裝載程序因此不涉及
  • 第二種方法獲取與給定鍵相關的值(如果它已經存在),並且不執行任何它不存在的操作。所以裝載機也不參與。

事實上,你甚至不用加載緩存,因此負載的數量將始終爲0

+0

能否請你解釋一下裝載機?抱歉沒有更好的理解抵制這個緩存。 – Vaandu

+0

LoadingCache是​​一個使用Loader函數構建的緩存。典型的例子:你想緩存網頁。所以你用一個加載器創建一個緩存。加載器的工作是根據其關鍵字獲取網頁:網頁的URL。當從緩存中獲取給定URL的頁面時,緩存會查看它是否已經擁有該網頁。如果是這樣,它會返回它。否則,它會調用加載器,然後存儲返回的Web頁面並將其返回。有關更多詳細信息,請參閱https://github.com/google/guava/wiki/CachesExplained。 –