2014-11-23 140 views
0

我有以下代碼在GAE上工作。從memcache獲取項目時,我只能得到5到20個結果的30 ms的延遲。這不是太高嗎?無論如何,我可以改善它嗎?Memcache延遲時間太長?

 @SuppressWarnings({ "unchecked"}) 
     @ApiMethod(name = "queryDesire2") 
     public List<String> queryDesire2(
       @Nullable @Named("name2") String name2){ 
      EntityManager mgr = getEntityManager(); 
      List<String> list1=new ArrayList<String>(); 
      Key userKey=null; 
      Long x=0L; 
      List<Key> keysNew = new ArrayList<Key>(); 
      MemcacheService memcache = MemcacheServiceFactory.getMemcacheService(); 

      try { 
        userKey=KeyFactory.createKey(name2,1); 
        if (memcache.get(userKey)==null) { 
         Query query2 = mgr.createQuery("select d.good from Desire d where d.ctgry = :name2");   
         list1 = query2.setParameter("name2", name2).getResultList();   

         for (String d : list1){ 
         x=x+1L; 
         userKey = KeyFactory.createKey(name2,x);        
         memcache.put(userKey, d); 
         memcache.put(name2+"no", x); 
         } 
        } else { 
         Long y=(Long) memcache.get(name2+"no"); 
        for (x = 1L; x<=y; x++){ 
         userKey=KeyFactory.createKey(name2,x); 
         keysNew.add(userKey); 
        } 
         Map mMap; 
         mMap = memcache.getAll(keysNew); 
         list1 = new ArrayList<String>(mMap.values()); 
        } 

      } 
      finally { 
       mgr.close(); 
      } 
      return list1; 


     } 

編輯:

enter image description here

我從https://appengine.google.com/ ...日誌捕獲此快照。我認爲最重要的26ms是延遲。但我也意識到有cpu_usd:0.000035。我真正關心的是瞭解我的應用程序使用多少實例小時。有沒有公​​式或方法來計算?

+0

您是如何計算Memcache調用的延遲的? – 2014-11-23 23:25:56

+0

我只是檢查應用引擎控制檯日誌中給出的延遲時間。 – savante 2014-11-23 23:30:11

+0

我沒有看到Memcache調用的單獨條目。如果你看看你的呼叫,你需要考慮你所做的所有其他事情,包括你的查詢。 – 2014-11-24 01:02:53

回答

3

您可以將所有對象放在一個調用中。您也可以使用AsyncMemcacheService - 通過put調用它可以更快地工作。

只需記住:

「多」批處理操作可以有任意數量的元素。調用的總大小以及所獲取數據的總大小不得超過32兆字節。

+0

我使用memcache.getAll()來做到這一點。難道不是這樣做的嗎? – savante 2014-11-23 23:31:55

+0

我說你可以批量'放''調用。 – 2014-11-24 00:48:30

+0

好吧,我現在看到。謝謝。另請在我的帖子上看到我的編輯。 – savante 2014-11-24 11:27:44

3

通過App Engine提供的memcache可以是shared or dedicated。通過共享,我假設您使用的是共享,您與其他用戶共享了一個共享池,而且等待時間將取決於他們目前的狀況。