我在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。什么都没用。但是,仍然不知道为什么突然会这样?请帮我弄清楚。
您的源代码没有更改,但运行时库的版本已更改,这一事实表明旧的运行时库能够序列化您的 retVal 对象,而新的运行时库以静默方式无法做到这一点,从而导致空值。 尝试更改要提交到缓存的内容的类型,例如,在设置之前转换为字符串,并在获取后将字符串转换回对象。 当然,这需要一些努力,但是如果您使用 Object,您将找不到解决此问题的灵丹妙药。