我在Java中使用Appengine Shared 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并尝试了专用的memcache。什么都行不通。但是,甚至不知道为什么会突然间呢?请帮我解决。
答案 0 :(得分:0)
您的源代码没有更改,但运行时库的版本已更改,这表明旧的运行时库能够序列化您的retVal对象,并且新的运行时库默默地无法执行此操作,从而导致空值。尝试更改提交到缓存的内容类型,例如在设置之前转换为String并在get之后将String转换回对象。当然,这需要一些努力,但如果您使用Object,则无法找到解决此问题的灵丹妙药。