2017-10-12 7 views
0

내 조직은 @Cache d입니다. 괜찮습니다.Memcache를 치지 않고 저장 목표로 지정

하지만 cron 작업의 경우 I 이 아니므로 Memcache를 만지려면 ofy().save.entities()으로 지정하십시오. 그 이유는 수천 개의 객체를 저장하기 때문에 검색을 위해 뜨겁게 사용할 필요가 없기 때문입니다.

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) 

과 :

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) 

그래서, 내 질문은, 내가 어떻게 저장합니까 또한

, 나는 같은 이상한 예외를 점점 계속 Memcache를 치지 않고 Objectify를 사용합니까?

그리고/또는 이러한 예외가 발생하지 않게하려면 어떻게해야합니까?

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

자세한 내용 here

답변

3

당신은 ofy().cache(false) 사용할 수 있지만 당신은 이것에 대해 신중해야합니다 :

1

당신은 작업을 위해 글로벌 캐시를 비활성화 할 수 있습니다.

저장시 Objectify가 캐시 항목을 지 웁니다. 로드시 Objectify는 memcache를 검사하고 값이 없으면 나중에 memcache에 저장합니다. 일반적으로 저장시이 삭제 동작을 유지하려는 경우 캐시에 오래된 항목을 남길 위험이 있습니다. 거의 액세스하지 않는 항목을 대량으로로드 할 때는 ofy().cache(false).load()...을 사용하고 memcache는 오염되지 않은 상태로 유지됩니다.

또는 엔터티 클래스에서 @Cache 만 제거하면됩니다.

귀하의 예외에 대해 어떤 말을해야할지 모르겠습니다. 그것은 GAE의 창자에서 왔고 Objectify가 아닙니다.