在我的应用程序中,我希望将大量数据保存在特定于当前在用户特定会话中访问我的Web应用程序的用户的内存中。据我所知,Play框架使用cookie来存储限制为4k的会话数据。如何获得更大的会话数据? ehacache memcache有帮助吗?此会话具有来自用户上次活动的到期时间。
答案 0 :(得分:4)
如果会话数据是高速缓存的,最好将其作为用户ID保存在Cache中,并在用户注销时清除它。在相关数据库更新/删除时从数据库重新加载它。将内容保存在外部缓存(如内存缓存)中,可以帮助您进行良好的扩展,并且如果需要,可以使您长期迁移到分布式缓存。在Share Nothing上查看这篇有趣的文章。
答案 1 :(得分:2)
Play的想法是消除会话的需要并在内存中保存大量信息。内存中方法的问题在于,您将用户绑定到其数据所在的特定服务器上,因为播放无共享意味着您可以轻松地水平扩展,而无需担心粘性会话等。
您拥有的选项 - 将临时数据存储在临时数据库中,该数据库可通过userId或用户会话的其他唯一标识符进行访问。该数据库将等同于您的服务器端会话。 - 使用缓存。然而,缓存的想法是,如果信息不在缓存中,则可以从数据库(或其他源)检索它。缓存不应该保证数据可用。如果在内存缓存(如ehcache)的情况下,如果您有一组负载平衡的服务器,则可能无法保证所有requets都返回到同一服务器,因此缓存中的数据可能无法在特定会话的所有服务器。
您的问题的答案取决于您的使用案例,但我认为根据您提供的信息,数据库是您的最佳方法。