2013-08-02 91 views
1

我是新來的谷歌番石榴緩存,但有一些問題。請看下面的代碼它很簡單。以下是我的問題和代碼。 1.每當我從另一個班級撥打方法testGuavaCache("6048698068"); - 它總是每次運行方法 - generateDataFromDAO();。不應該只將該方法調用一次,因爲第一次當它不存在於內存中時它將緩存,並且下次它將從內存中提供。感謝您的早日回覆。番石榴緩存不緩存

public class GuavaCach{ 
    private static Logger objLogger = Logger.getLogger(WordToPDF.class);  
    LoadingCache<String, String> guavaCache = CacheBuilder.newBuilder() 
     .maximumSize(10000) 
     .build(
      new CacheLoader<String, String>() { 
      public String load(String key) throws Exception { 
       objLogger.debug("-----KEY IN LOAD BEFORE calling generateDataFromDAO------->" + key + "<-------"); 
       String out = generateDataFromDAO(); 
       objLogger.debug("-----out after calling generateDataFromDAO------->" + out + "<-------"); 
       return out; 
      } 
    }); 

    public String testGuavaCache(String key) throws IOException { 
     String dataFromDAO = null; 
     objLogger.debug("-----Entering testGuavaCache-----"); 
     try { 
      dataFromDAO = guavaCache.get(key); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     return dataFromDAO; 
    }   

    public String generateDataFromDAO() throws PreviewErrorMsg, IOException { 
     objLogger.debug("-----Entering generateDataFromDAO-----"); 
     String data = "GeneratedDataFromDAO";  
     return data; 
    } 
} 

在另一類 - 我上述主叫:

GuavaCach gCache =新GuavaCach(); gCache..testGuavaCache( 「6048698068」);

+0

您沒有顯示調用這些方法或輸出的代碼。這兩次電話會有一些差異來解釋問題。 – chrylis

+0

GuavaCach gCache = new GuavaCach(); gCache..testGuavaCache( 「6048698068」); – user2565431

+2

你是否每次都調用'new GuavaCach()'? – chrylis

回答

3

您每次提問時都會創建一個新的緩存,並且(空)新緩存中沒有任何答案。您需要創建一個緩存,並將其放在一邊,並反覆詢問相同的問題以獲得好處。您沒有發佈過多的使用方法,但只能在其他代碼中撥打new GuavaCach(),然後重複撥打g.testGuavaCache(key)

+1

或將私有'guavaCache'成員更改爲靜態。 –