0

用户向服务器发出 HTTP 请求。这个请求是用某个类的对象处理的,我们称之为“处理器”。然后同一用户在两分钟内发出另一个 HTTP 请求。我希望它使用与第一个处理器相同的实例进行处理。所以基本上我想在几个请求中保持某个对象的状态。

我知道我可以每次都将它保存到数据存储区,然后再加载回来,但是这种方法似乎很慢。有没有办法将对象存储在某个 RAM 位置?

4

3 回答 3

1

使用内存缓存怎么样?

您无法确保对应用程序的连续请求会发送到同一个实例,但 memcache 可以帮助减少或消除每个请求访问数据存储区的开销。

于 2012-06-08T11:07:56.800 回答
1

听起来你描述的是一个session

我不确定您使用的是哪种语言运行时和 Web 框架,但它肯定包含对会话的支持。(如果您使用的是 Java,则需要启用它。)

标准会话机制将一个小 ID 放入存储在用户浏览器中的 cookie 中。对于每个请求,每个请求都可能转到不同的应用程序服务器,此 ID 用作从数据存储读取和写入持久信息的密钥。

如果数据存储访问对您来说太慢,我建议不要将 memcache 用于此会话存储,因为 memcache 在设计上是不可靠的,因此用户的会话信息可能随时消失,这对他们来说将是一个糟糕的体验。

如果您要存储的数据量小于几千字节,那么我建议您执行 Play Framework 所做的事情,即加密您的会话数据并将其直接存储在存储在用户浏览器中的 cookie 中。这是快速且真正无状态的。

如果您的数据多于 cookie 可存储的数据,并且您不想使用数据存储,则可以在浏览器上使用 JavaScript 本地存储,并使用 AJAX 调用与服务器通信。(如果您想支持旧版浏览器,您可能需要使用jStorage包装库。)

于 2013-11-09T06:58:04.443 回答
0

如果内存缓存不够,您可以使用后端来维护状态。使用常驻后端(或其中的一组)并将来自前端的传入请求路由到具有该状态的后端机器。

文档:Python Java

于 2012-06-08T16:40:02.237 回答