谷歌应用程序引擎和应用程序范围数据



我正在开发一个基于spring的web应用程序,该应用程序部署在Google应用程序引擎上。我有一个在应用程序范围中存储数据的管理器。我使用的是一个springbean(singleton),它保存一个映射并简单地从映射中执行get和remove,然而,GAE是一个分布式环境,这种设计有一个问题,因为每个应用程序实例都有自己的管理器,并且不能保证向同一应用程序实例发出请求。所以我环顾四周,找到了两个可能的解决方案:

  1. 使用数据存储
  2. 使用memcache

存储数据将导致大量的读取和写入,最终我不需要保存数据。第二个看起来很有希望,但谷歌提到:

通常,应用程序不应期望缓存值始终可用

我需要一个保证,当我要求我的经理获得一个价值时,它会退还它

还有其他解决方案吗?我错过什么了吗?

一个常见的解决方案是将值存储在由数据存储支持的memcache中。

首先从memcache中获取应用程序范围值,如果memcache返回零结果(缓存未命中事件),则从数据存储中获取值,并将获取的值放在memcache上。

通过这种方式,对memcache的下一次获取将返回应用程序范围的数据,从而减少对数据存储的(相对)昂贵读取的需要。

AppEnginememcache是最近使用最少的缓存,所以经常读取的值会发生很少的缓存未命中事件。

要获得应用程序范围值,一个更复杂的解决方案是将值存储在驻留后端的内存中,并让所有其他实例通过servlet处理程序从/向该特定后端请求/更新值。

最新更新