Session Java中会话变量的替代方案

Session Java中会话变量的替代方案,session,tomcat,web-applications,session-variables,session-cookies,Session,Tomcat,Web Applications,Session Variables,Session Cookies,我在这里讨论了一些问题,试图找到使用会话变量的替代方法。我有几点要说,所以我把我的作为一个新问题发布 我的web应用程序是使用Spring在Java上构建的。我使用纯SQL和hibernate来执行一系列数据库读/写操作。它在两个Tomcat容器上运行。我的要求是找到一个合适的、可伸缩的替代方案来使用会话变量。目前,我正在使用会话来存储大量事务。有两种类型的事务,完成的和排队的,我有两个会话对象来存储它们。有数千个事务,每个事务都有大约10个相关变量 首先,我想在会话中存储所有事务。原因是我希望

我在这里讨论了一些问题,试图找到使用会话变量的替代方法。我有几点要说,所以我把我的作为一个新问题发布

我的web应用程序是使用Spring在Java上构建的。我使用纯SQL和hibernate来执行一系列数据库读/写操作。它在两个Tomcat容器上运行。我的要求是找到一个合适的、可伸缩的替代方案来使用会话变量。目前,我正在使用会话来存储大量事务。有两种类型的事务,完成的和排队的,我有两个会话对象来存储它们。有数千个事务,每个事务都有大约10个相关变量

  • 首先,我想在会话中存储所有事务。原因是我希望避免数据库查询,直到某些内容发生更改,即任何事务都已更新。我有在任何更新发生时重新加载会话对象的逻辑
  • web应用程序的用户还不多,所以我不太需要优化内存大小来存储所有会话对象,但如果有一个可以容纳数十万个事务的设计,那肯定会很好
  • 我有一个负载平衡器,我的web应用程序在两个Tomcat应用程序上运行,我遇到了不同服务器上加载的事务不匹配的问题。例如,我根据日期对交易进行排序——当我浏览不同的交易时,它们不会在日期上保持排序。我假设其中一个服务器有一个已排序的列表,而另一个服务器有一个未排序的列表。我还没有探讨会话复制的选项,我也不想使用sticky会话
  • 使用cookies-太麻烦了,因为每个cookie都有大量的事务和细节
  • 使用隐藏变量或作为请求属性-不太好,因为我必须将每个链接转换为表单提交
  • 自定义缓存-目前还没有探索,也没有大型基础设施来实现它

  • 还有其他我没有想到的选择吗?

    您确定需要缓存任何内容吗?数据库已经在这方面做了很好的工作,这也将完全解决您的第3点。如果没有共享会话或在其他地方(例如Tomcat和数据库之间)进行缓存,则无法解决此问题。我获取事务的初始查询是一个简单的JDBC select*查询。数据库是否缓存这些结果?即使数据库缓存了这些,我仍然会进行一些转换,比如格式化日期和名称等。我希望用已经格式化的事务细节维护POJO类的列表。在这一点上,我也在考虑会话复制。我再次建议您可能不需要这些。您应该在需要时执行所需的查询。我并不是说要把整张桌子都装进去。然后查看是否存在性能问题。