2014-03-05 62 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