【发布时间】:2011-06-21 20:53:36
【问题描述】:
在我的应用程序中,我想在内存中保留大量数据,这些数据特定于当前在用户特定会话中访问我的 Web 应用程序的用户。据我所知,play 框架使用 cookie 来存储限制为 4k 的会话数据。我怎样才能拥有更大的会话数据? ehacache memcache 在这里有帮助吗?此会话从用户的最后一次活动开始具有到期时间。
【问题讨论】:
标签: session cookies playframework
在我的应用程序中,我想在内存中保留大量数据,这些数据特定于当前在用户特定会话中访问我的 Web 应用程序的用户。据我所知,play 框架使用 cookie 来存储限制为 4k 的会话数据。我怎样才能拥有更大的会话数据? ehacache memcache 在这里有帮助吗?此会话从用户的最后一次活动开始具有到期时间。
【问题讨论】:
标签: session cookies playframework
如果会话数据是可缓存的,最好将其保存在缓存中,并在用户注销时将其清除。在相关的数据库更新/删除时从数据库中重新加载它。将内容保存在像 memcache 这样的外部缓存中,将帮助您很好地扩展,如果需要,您可以长期迁移到分布式缓存。在Share Nothing 上查看这篇有趣的文章。
【讨论】:
Play 的想法是消除对会话的需求以及将大量信息保存在内存中。内存中方法的问题在于,您将用户绑定到保存其数据的特定服务器,其中 - 由于 play share nothing 方法意味着您可以轻松横向扩展,而无需担心粘滞会话等。
您的选择是 - 将临时数据存储在临时数据库中,可以通过 userId 或用户会话的其他唯一标识符访问该数据库。该数据库将相当于您的服务器端会话。 - 使用缓存。然而,缓存的想法是,如果信息不在缓存中,则可以从数据库(或其他来源)中检索它。缓存不必保证数据可用。如果在内存缓存(如 ehcache)的情况下,如果您有一组负载平衡的服务器,您可能无法保证所有请求都返回到同一台服务器,因此缓存中的数据可能无法在特定会话的所有服务器。
您的问题的答案取决于您的用例,但根据您提供的信息,我认为数据库是您最好的方法。
【讨论】: