Memcache延迟时间太高?

时间:2014-11-23 23:15:14

标签: java google-app-engine memcached jpql low-latency

我有以下代码在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;


        } 

修改

enter image description here

我从https://appengine.google.com/ ...日志中捕获了此快照。我假设顶部的26ms是延迟。但我也意识到有cpu_usd:0.000035。我真正关心的是了解我的应用程序将使用多少实例小时。是否有任何公式或方法来计算?

2 个答案:

答案 0 :(得分:3)

您可以将所有对象放在一个通话中。您也可以使用AsyncMemcacheService - 使用put调用它会更快一些。

请记住:

  

“多”批处理操作可以包含任意数量的元素。该   调用的总大小和提取的数据的总大小不得   超过32兆字节。

答案 1 :(得分:3)

App Engine提供的内存缓存是shared or dedicated。使用共享,这是我假设您正在使用的,您与其他用户在一个池中,延迟将取决于他们目前正在做什么。