当下一个请求命中时,您不能依赖静态变量(或JVM内存中的任何其他内容),因为Google可以随时启动和停止虚拟机。从它的外观来看,它们似乎更喜欢在同一个JVM中启动其他JVM而不是其他线程,从而加剧了这个问题。
但是,您应该能够将静态变量用作缓存层,前提是您可以从其他位置加载数据(如果它已经消失)。
我也不会尝试过度使用内存,必须有一个可以使用多少内存的配额。
App Engine通过创建应用程序的新实例来扩展,因为用户数量会增加。正如drudru所说,不同的用户可能会被不同的实例服务。通常,memcache是存储您希望全局一致的最快的地方。但是,在您的情况下,可能还有一些改进空间。
你提到你有一个帖子列表,你随机选择5向用户显示。 2个不同的用户是否看到不同的5个集合是否重要?无论如何,如果你选择随机的,也许没关系。然后你可以在memcache中存储完整的帖子列表,并从memcache中拉出5个随机的帖子并将它们存储在一个静态变量中。
第二,你到底记得什么,你是如何把它拉出来的?你是否在memcache中存储了一大堆完整的帖子,将它们全部存入,然后选择5?也许你可以只下载帖子列表,选择5,只获得你需要的5个?如果您认为反向排序会减慢您的速度,那么这可能会有所帮助。你得到它们后,你是否正在对帖子进行任何处理?如果是这样,是否可以缓存该处理的结果?
是的,无法保证您的实例对于互联网上的各种用户都是一样的。在最坏的情况下,你最终可能会不断地将其读入静态。内存缓存有更高的可用保证。我只想使用内存缓存,你的应用程序将来不应该有任何扩展问题。