用户向服务器发出 HTTP 请求。这个请求是用某个类的对象处理的,我们称之为“处理器”。然后同一用户在两分钟内发出另一个 HTTP 请求。我希望它使用与第一个处理器相同的实例进行处理。所以基本上我想在几个请求中保持某个对象的状态。
我知道我可以每次都将它保存到数据存储区,然后再加载回来,但是这种方法似乎很慢。有没有办法将对象存储在某个 RAM 位置?
用户向服务器发出 HTTP 请求。这个请求是用某个类的对象处理的,我们称之为“处理器”。然后同一用户在两分钟内发出另一个 HTTP 请求。我希望它使用与第一个处理器相同的实例进行处理。所以基本上我想在几个请求中保持某个对象的状态。
我知道我可以每次都将它保存到数据存储区,然后再加载回来,但是这种方法似乎很慢。有没有办法将对象存储在某个 RAM 位置?
使用内存缓存怎么样?
您无法确保对应用程序的连续请求会发送到同一个实例,但 memcache 可以帮助减少或消除每个请求访问数据存储区的开销。
听起来你描述的是一个session。
我不确定您使用的是哪种语言运行时和 Web 框架,但它肯定包含对会话的支持。(如果您使用的是 Java,则需要启用它。)
标准会话机制将一个小 ID 放入存储在用户浏览器中的 cookie 中。对于每个请求,每个请求都可能转到不同的应用程序服务器,此 ID 用作从数据存储读取和写入持久信息的密钥。
如果数据存储访问对您来说太慢,我建议不要将 memcache 用于此会话存储,因为 memcache 在设计上是不可靠的,因此用户的会话信息可能随时消失,这对他们来说将是一个糟糕的体验。
如果您要存储的数据量小于几千字节,那么我建议您执行 Play Framework 所做的事情,即加密您的会话数据并将其直接存储在存储在用户浏览器中的 cookie 中。这是快速且真正无状态的。
如果您的数据多于 cookie 可存储的数据,并且您不想使用数据存储,则可以在浏览器上使用 JavaScript 本地存储,并使用 AJAX 调用与服务器通信。(如果您想支持旧版浏览器,您可能需要使用jStorage包装库。)