Memcache操作失败,放弃异常是什么原因?

What causes Memcache operation failed, giving up exception?

我有一个应用程序引擎 java 项目并且正在使用 objectify。我偶尔会在与将项目放入内存缓存相关的应用程序引擎 Web 控制台的 "stack driver error reporting" 视图中获得堆栈跟踪。这是代码:

try {
    TestItem t = new TestItem(...);
    ofy().save().entity(t).now();
} catch (Exception e) {

}

这是我偶尔会看到的错误:

com.googlecode.objectify.cache.MemcacheServiceRetryProxy invoke: Memcache operation failed, giving up
java.lang.reflect.InvocationTargetException
    at com.google.appengine.runtime.Request.process-i4dx9s2kED3CVcPe(Request.java)
    at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:44)
    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:319)
    at com.googlecode.objectify.cache.CachingAsyncDatastoreService.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.impl.ResultAdapter.now(ResultAdapter.java:34)
    at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
    at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
    at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
    at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
    at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
    at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
    at com.me.test.Test.putSomethinInMemcache(Test.java:13)
    ...
Caused by: com.google.appengine.api.memcache.MemcacheServiceException: Memcache putAll: Unknown exception setting 1 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.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)
    ... 52 more

它似乎没有被 try 语句捕获。我只是在前面提到的管理控制台中看到它。

有谁知道这是什么意思,或者我怎样才能抓住它?我主要担心的是,在此操作失败后,可能会有对象的旧副本卡在 memcache 中。

使用 objectify 5.1.10.

谢谢

这是一个 get() 操作。如果 memcache 在 get() 操作期间不可用,Objectify 只会从数据存储中读取。错误已记录且性能有所下降,但应用程序继续运行。

从技术上讲,写入操作期间可能会出现错误(任何 save() 都会清除缓存条目;读取操作会重新填充缓存)。这在理论上可能会在缓存中留下陈旧的信息。对此无能为力 - 如果您无法清除缓存条目,它就会卡在那里。我的建议是,如果您有敏感数据但希望将其缓存,请在缓存条目上设置合理的超时时间(@Cache(expirationSeconds=60) 或诸如此类)。