我有以下代码在GAE上工作。从memcache获取项目时,我得到的延迟大约为30毫秒,仅为5到20个结果。不是太高了吗?无论如何我能改进吗?
@SuppressWarnings({ "unchecked"})
@ApiMethod(name = "queryDesire2")
public List<String> queryDesire2(
@Nullable @Named("name2") String name2){
EntityManager mgr = getEntityManager();
List<String> list1=new ArrayList<String>();
Key userKey=null;
Long x=0L;
List<Key> keysNew = new ArrayList<Key>();
MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
try {
userKey=KeyFactory.createKey(name2,1);
if (memcache.get(userKey)==null) {
Query query2 = mgr.createQuery("select d.good from Desire d where d.ctgry = :name2");
list1 = query2.setParameter("name2", name2).getResultList();
for (String d : list1){
x=x+1L;
userKey = KeyFactory.createKey(name2,x);
memcache.put(userKey, d);
memcache.put(name2+"no", x);
}
} else {
Long y=(Long) memcache.get(name2+"no");
for (x = 1L; x<=y; x++){
userKey=KeyFactory.createKey(name2,x);
keysNew.add(userKey);
}
Map mMap;
mMap = memcache.getAll(keysNew);
list1 = new ArrayList<String>(mMap.values());
}
}
finally {
mgr.close();
}
return list1;
}
修改
我从https://appengine.google.com/ ...日志中捕获了此快照。我假设顶部的26ms是延迟。但我也意识到有cpu_usd:0.000035。我真正关心的是了解我的应用程序将使用多少实例小时。是否有任何公式或方法来计算?
答案 0 :(得分:3)
您可以将所有对象放在一个通话中。您也可以使用AsyncMemcacheService - 使用put调用它会更快一些。
请记住:
“多”批处理操作可以包含任意数量的元素。该 调用的总大小和提取的数据的总大小不得 超过32兆字节。
答案 1 :(得分:3)
App Engine提供的内存缓存是shared or dedicated。使用共享,这是我假设您正在使用的,您与其他用户在一个池中,延迟将取决于他们目前正在做什么。