【问题标题】:Why GAE memcache keeps resetting?为什么 GAE 内存缓存不断重置?
【发布时间】:2015-03-13 00:38:16
【问题描述】:

我正在使用 memcache 仅存储整数值以及使用字符串值创建的键。我没有定义过期值来让这些值尽可能地保留,就像谷歌文档所说的那样。但问题是最旧的项目最多在那里停留 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);
        }

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

【问题讨论】:

    标签: java google-app-engine memcached


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多