【发布时间】:2012-06-22 22:03:01
【问题描述】:
我正在使用 Spring 3.1 开发在 Google App Engine 上运行的 Web 服务 servlet,由于我对这个游戏还很陌生,我根本不知道应该如何缓存内容。在 servlet 的生命周期内,我似乎可以在很多地方放置需要维护的东西:
- 应用程序上下文。在这里定义 bean 可以让我轻松地将它们注入到我的代码中。这似乎是最简单的解决方案,只需将我的 bean 限定为单例。
- Servlet 上下文。为此,当我的 servlet 启动时,我可以通过抓取它的实例并将其放入 ServletContext 中,然后执行
setAttribute()。 - 内存缓存。我还没有研究这么多,但我想我会得到一个缓存实例,然后像 ServletContext 一样将一个对象推入其中。
我很好奇的具体案例是创建用户帐户。我想保留所有用户 ID 的 HashSet,以便检查请求的用户 ID 是否已在使用中。
除了上面的具体案例,包括使用每种不同技术的案例,我们将不胜感激。
【问题讨论】:
-
请注意,1 和 2 实际上是相同的。在一般的基于 servlet 的 MVC 框架中,“应用程序上下文”使用了 servlet 上下文属性。它只是一个额外的抽象层。
-
我认为将所有用户 ID 存储在 HashMap 缓存中并不是一个好主意。首先,这不会水平扩展。其次,您需要同步读取/写入它以确保不存在竞争条件。
标签: java spring google-app-engine caching servlets