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

标签 java google-app-engine memcached

我使用内存缓存仅存储整数值以及使用字符串值创建的键。正如谷歌文档所说,我没有定义过期值来让这些值尽可能长时间地保留。但问题是最旧的元素最多在那里停留 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) 来检查它是否为 null。如果不为 null,则再次将其从缓存中取出并转换为 Integer。将第一个 memcache.get(mKey) 设置为稍后可以使用的变量,因为您可能会遇到缓存在第一次和第二次 get 之间过期的情况。

关于java - 为什么GAE内存缓存不断重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022902/

相关文章:

java不正确的西里尔字符串

JavaFX - 多个文本字段应该过滤一个表格 View

java - 查询数据库时 Google App Engine getJDOExceptionForNucleusException 错误

python - 如何在 python 中模拟 POST 参数

java - 通过 Web 应用程序访问本地文件

java - 如何使用 Graphics2D 和 AffineTransform 围绕不断变化的原点旋转椭圆形?

python - 应用程序引擎上的线程安全客户端库(python)

mysql - 缓存复杂计算的数据结果

php - 多个 memcached 服务器问题

google-app-engine - Google App Engine 低内存缓存性能