2017-10-12 10 views
0

私のエンティティは@Cache dです。それは問題ありません。Memcacheを打つことなく保存を目標化する

しかし、cronジョブの場合、I になりません。ofy().save.entities()でMemcacheにアクセスします。理由は、私は何千ものオブジェクトを保存するので、検索のためにそれらを熱くする必要はありません。

また、私のような奇妙な例外は、得続ける:だから、私の質問は、私は保存する方法、である

com.google.appengine.api.memcache.MemcacheServiceException: Memcache getAll: exception getting multiple keys 
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException (MemcacheServiceApiHelper.java:69) 
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException (MemcacheServiceApiHelper.java:111) 
at com.google.appengine.api.utils.FutureWrapper.handleParentException (FutureWrapper.java:52) 
at com.google.appengine.api.utils.FutureWrapper.get (FutureWrapper.java:91) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet (MemcacheServiceImpl.java:26) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.getAll (MemcacheServiceImpl.java:64) 
at com.googlecode.objectify.cache.KeyMemcacheService.getAll (KeyMemcacheService.java:83) 
at com.googlecode.objectify.cache.EntityMemcache.cacheGetAll (EntityMemcache.java:365) 
at com.googlecode.objectify.cache.EntityMemcache.putAll (EntityMemcache.java:296) 
at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success (CachingAsyncDatastoreService.java:279) 
at com.googlecode.objectify.cache.CachingAsyncDatastoreService$3.success (CachingAsyncDatastoreService.java:268) 

java.lang.reflect.InvocationTargetException 
at com.google.appengine.runtime.Request.process-326a59f97d0f0252 (Request.java) 
at sun.reflect.GeneratedMethodAccessor21.invoke (Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke (Method.java:42) 
at com.googlecode.objectify.cache.MemcacheServiceRetryProxy.invoke (MemcacheServiceRetryProxy.java:68) 
at com.sun.proxy.$Proxy9.putAll (Unknown Source) 
at com.googlecode.objectify.cache.KeyMemcacheService.putAll (KeyMemcacheService.java:91) 
at com.googlecode.objectify.cache.EntityMemcache.empty (EntityMemcache.java:323) 
at com.googlecode.objectify.cache.CachingAsyncDatastoreService$5.trigger (CachingAsyncDatastoreService.java:445) 
at com.googlecode.objectify.cache.TriggerFuture.isDone (TriggerFuture.java:87) 
at com.googlecode.objectify.cache.TriggerFuture.get (TriggerFuture.java:102) 
at com.googlecode.objectify.cache.PendingFutures.completeAllPendingFutures (PendingFutures.java:57) 
at com.googlecode.objectify.ObjectifyService$2.close (ObjectifyService.java:120) 
at com.googlecode.objectify.ObjectifyFilter.doFilter (ObjectifyFilter.java:49) 

と:

com.google.appengine.api.memcache.MemcacheServiceException: Memcache putAll: Unknown exception setting 2 keys 
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException (MemcacheServiceApiHelper.java:69) 
at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$RpcResponseHandlerForPut.handleApiProxyException (AsyncMemcacheServiceImpl.java:349) 
at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException (MemcacheServiceApiHelper.java:111) 
at com.google.appengine.api.utils.FutureWrapper.handleParentException (FutureWrapper.java:52) 
at com.google.appengine.api.utils.FutureWrapper.get (FutureWrapper.java:91) 
at com.google.appengine.api.utils.FutureWrapper.get (FutureWrapper.java:89) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet (MemcacheServiceImpl.java:26) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.putAll (MemcacheServiceImpl.java:115) 
at com.googlecode.objectify.cache.KeyMemcacheService.putAll (KeyMemcacheService.java:91) 
at com.googlecode.objectify.cache.EntityMemcache.getAll (EntityMemcache.java:242) 
at com.googlecode.objectify.cache.CachingAsyncDatastoreService.get (CachingAsyncDatastoreService.java:252) 

とをMemcacheを使わずにObjectifyを使用しますか?

および/またはこれらの例外が発生しないようにするにはどうすればよいですか?

ofy().cache(false).save()...

詳細here

答えて

3

あなたがofy().cache(false)使用することができますが、この程度に注意する必要があります:

1

あなたは、操作のためのグローバル・キャッシュを無効にすることができます。

保存すると、Objectifyはキャッシュエントリをクリアします。ロード時に、Objectifyはmemcacheをチェックし、値が存在しない場合は、後でmemcacheに保存します。一般的に、保存時にこのクリア動作を維持する必要がある場合は、古いエントリをキャッシュに残す危険性があります。頻繁にアクセスされないエンティティを一括してロードする場合はofy().cache(false).load()...を使用し、memcacheは未感染のままです。

エンティティクラスから@Cacheを削除するだけです。

あなたの例外について何を言いたいのか分かりません。それはGAEの腸から来て、Objectifyではありません。

関連する問題