我是 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(我最初是这样做的,直到我意识到由于不同的实例服务于我的请求,它不会是全局的)。
Help?
Yes, Memcache http://code.google.com/appengine/docs/java/memcache/overview.html在应用程序的所有实例之间共享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)