我正在使用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重置之间的任何关联。这种行为对于共享内存缓存是正常的还是代码有问题?
答案 0 :(得分:3)
共享内存缓存以尽力而为的方式提供缓存容量,并且受App Engine提供的所有应用程序的总体需求的影响。专用的内存缓存提供专门为您的应用程序分配的固定缓存容量。
https://cloud.google.com/appengine/docs/adminconsole/memcache
同样在您的代码中,您将从缓存中获取该项目两次。您调用memcache.get(mKey)来检查它是否为null。如果不为null,则再次将其从缓存中取出并转换为Integer。将第一个memcache.get(mKey)设置为稍后可以使用的变量,因为您可能会遇到缓存在第一个和第二个get之间到期的可能性。