我正在开发一个部署在Google App Engine上的基于Spring的Web应用程序。 我有一个经理,可以在应用范围内存储数据。我使用一个弹簧bean(单例)来保存地图,只需从地图中执行get和remove, 但GAE是一个分布式环境,这个设计有一个问题,因为每个应用程序实例都有自己的管理器,并且不保证对同一个应用程序实例提出请求。 所以我环顾四周找到了2个可能的解决方案:
存储数据会导致大量读写操作,最终我不需要保存数据。 第二个看起来很有希望,但谷歌提到:
通常,应用程序不应期望缓存值始终可用。
我需要保证,当我要求我的经理得到一个值时,它会返回它。
还有其他解决方案吗? 我错过了什么吗?
答案 0 :(得分:2)
常见的解决方案是将值存储在由数据存储区支持的内存缓存中。
首先从内存缓存中获取应用程序范围值,如果内存缓存返回零结果(缓存未命中事件),则从数据存储区中获取值并将获取的值放在内存缓存上。
通过这种方式,对memcache的下一次提取将返回应用程序范围数据,从而减少了对数据存储区进行(相对)代价高昂读取的需要。
App Engine内存缓存是最近最少使用的缓存,因此经常读取的值会受到少量缓存未命中事件的影响。
具有应用程序范围值的更复杂的解决方案是将值存储在驻留后端的内存中,并让所有其他实例通过servlet处理程序从/向此特定后端请求/更新值。 / p>