为什么 GAE 内存缓存不断重置?

Why GAE memcache keeps resetting?

我正在使用内存缓存仅存储整数值以及使用字符串值创建的键。 google 文档说,我没有定义过期值来让这些值尽可能长时间地挂起。但问题是最旧的物品最多停留 4 小时。通常只有不到 2 小时。突然间一切都归零了。这是代码:

Key mKey=null;
MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();

    try {
        mKey=KeyFactory.createKey("device",deviceNo);
        if (memcache.get(mKey)==null) {
        Query query = mgr.createQuery("select d.insDate from TrialCheck d where d.DeviceId = :deviceNo");
        resultList.addAll(query.setParameter("deviceNo", deviceNo).getResultList());
            if (resultList.size()<1){
                resultList.add(0);
            } else {
                for (Integer d:resultList) {
                    memcache.put(mKey, d);
                }
            }
        } else {
            Integer installDate = (Integer) memcache.get(mKey);
            resultList.add(installDate);
        }

我读过一些帖子说它是关于实例关闭的,但我看不出实例和内存缓存重置之间有任何关联。这种行为对于共享内存缓存来说是正常的还是代码有问题?

共享内存缓存尽最大努力提供缓存容量,并受 App Engine 服务的所有应用程序的总体需求的影响。专用内存缓存提供专门分配给您的应用程序的固定缓存容量。

https://cloud.google.com/appengine/docs/adminconsole/memcache

同样在您的代码中,您两次从缓存中获取项目。您调用 memcache.get(mKey) 来检查它是否为空。如果不为空,则再次将其从缓存中取出并转换为 Integer。将第一个 memcache.get(mKey) 设置为您可以稍后使用的变量,因为您可能 运行 进入缓存在第一次和第二次获取之间过期的机会。