Memcache (Java) for Google App Engine 是全局缓存吗?
我是Google App Engine的新手,在过去的几天里,我一直在使用GAE的Memcache构建一个应用程序来存储数据。根据我最初的发现,GAE的Memcache似乎不是全球性的?
让我进一步解释。我知道对GAE的不同请求可能会由不同的实例提供服务(事实上,这似乎经常发生)。正是出于这个原因,我使用Memcache来存储一些共享数据,而不是静态Map。我认为(也许是错误的)这是使用分布式缓存的要点,以便任何节点都可以访问数据。
另一个明确的可能性是我做错了什么。我尝试了JCache和低级Memcache API(我正在编写Java,而不是Python)。这就是我正在做的检索缓存:
MemcacheService cache = MemcacheServiceFactory.getMemcacheService();
部署后,这是我检查的内容(通过我的应用程序日志):
- 初始请求由特定节点提供服务,数据存储在上面检索到的缓存中。
- 新的几个请求检索相同的缓存,并且数据就在那里。
- 当生成一个新节点来为请求提供服务时(从日志中我知道这种情况何时发生,因为GAE记录了“此请求导致为您的应用程序启动新进程..”的事实),缓存被检索并且是空的!!
现在我也知道,不能保证数据在Memcache中会存在多长时间,但是从我的发现来看,当diff实例尝试访问缓存时,数据似乎已经消失了。这似乎违背了分布式全局缓存的整个概念不是吗?
希望有人能确切地澄清这应该如何表现。如果Memcache不是全局的,并且每个服务器实例都有自己的副本,那么为什么还要使用Memcache呢?我可以简单地使用静态HashMap(我最初这样做,直到我意识到由于不同的实例为我的请求提供服务,它不会是全局的)。
帮助?