2014-03-05 66 views
0

我在Java中使用Appengine共享Memcache。突然之間,它停止了存儲,甚至沒有拋出任何異常。我的實現如下,Appengine不存儲數據的共享Memcache

public class MemcachedUtil 
    { 

      public static final int ONE_DAY_SECONDS=86400; 
      public static final int ONE_DAY_MILLISECONDS=86400000; 
      public static final int ONE_HOUR_SECONDS=3600; 
      public static final int ONE_HOUR_MILLISECONDS=3600000; 

     public static void set(String key,Object value,String namespace) 
     { 
    MemcacheService srv=MemcacheServiceFactory.getMemcacheService(namespace); 
    srv.put(key,value, Expiration.byDeltaSeconds(ONE_DAY_SECONDS)); 
     } 
      ............ // Get/GetAll/Set methods like above.... declared. 
    } 


    In another class , i am implementing like follows.... 
... 
    MemcachedUtil.set("salePrice_"+highToLow+"_"+pageNo, retVal, "Test"); // Set 
    MemcachedUtil.get("salePrice_"+highToLow+"_"+pageNo, "Test"); // Get 

並給予到期時間如下,

public static final int ONE_DAY_SECONDS=86400; 
    public static final int ONE_DAY_MILLISECONDS=86400000; 
    public static final int ONE_HOUR_SECONDS=3600; 
    public static final int ONE_HOUR_MILLISECONDS=3600000; 

任何知道爲什麼嗎?即使我已更新,Appengine SDK 1.9.0也嘗試過專用的內存緩存。什麼都沒有但是,仍然沒有弄清楚爲什麼突然間呢?請幫我弄清楚。

+0

不應該是srv.set()和srv.get()嗎? –

+0

我的課程「MemcachedUtil」包含所有設置,集體獲取方法。編輯我的qn,請檢查。 – Femina

回答

0

事實上,您的源代碼沒有改變,但運行時庫的版本發生了變化,這表明舊的運行時庫能夠序列化您的retVal對象,並且新的運行時庫默默無法執行此操作,從而導致在空值。嘗試更改提交到緩存的內容的類型,例如在設置之前轉換爲字符串並在獲取後將字符串轉換回您的對象。它需要一定的努力,當然,但是如果你使用Object,你不會找到這個問題的銀彈。

+0

謝謝Martin,Lemme試試。 – Femina