繁体   English   中英

Memcache延迟时间过高?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM