[英]Memcache Latency Time Too High?
我有下面的代码在GAE上工作。 从内存缓存中获取项目时,我仅获得5到20个结果的30毫秒左右的延迟。 太高了吗? 无论如何,我可以改善它吗?
@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。 我真正关心的是了解我的应用程序将使用多少实例小时。 有什么公式或方法可以计算出来吗?
您可以将所有对象放在一个调用中。 您还可以使用AsyncMemcacheService-通过put调用,它将工作得更快。
只记得:
“多个”批处理操作可以具有任意数量的元素。 调用的总大小和获取的数据的总大小不得超过32 MB。
通过App Engine可用的内存缓存是共享的或专用的 。 使用共享功能(这是我假设您正在使用的功能)会使您与其他用户处于同一个池中,而延迟将在很大程度上取决于他们目前的工作状况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.