我应该使用Spring会话范围的bean还是像ehcache这样的缓存?

我应该使用Spring会话范围的bean还是像ehcache这样的缓存?,spring,session-state,ehcache,Spring,Session State,Ehcache,我们有一个需要维护状态的应用程序,这样一些包含数据(可能很多)的对象可以在“对话”交互中被客户端(浏览器)查询。在每个请求中重新加载数据是没有效率的 我们使用Spring和会话范围的bean来维护一些会话控制的数据。然而,这些新的豆子会更大 这是会话范围bean的适当使用还是缓存(ehcache)更合适 我们不愿意引入缓存技术,除非我们真的必须这样做 另一个因素是该应用程序需要部署在集群中。在哪种情况下,会话范围的bean会通过应用服务器的会话复制来复制,或者使用ehcache(我相信它可以分布

我们有一个需要维护状态的应用程序,这样一些包含数据(可能很多)的对象可以在“对话”交互中被客户端(浏览器)查询。在每个请求中重新加载数据是没有效率的

我们使用Spring和会话范围的bean来维护一些会话控制的数据。然而,这些新的豆子会更大

这是会话范围bean的适当使用还是缓存(ehcache)更合适

我们不愿意引入缓存技术,除非我们真的必须这样做

另一个因素是该应用程序需要部署在集群中。在哪种情况下,会话范围的bean会通过应用服务器的会话复制来复制,或者使用ehcache(我相信它可以分布在集群中)会更有效


非常感谢您的指导。

对此有几点想法(免责声明:我为terracotta/ehcache工作……所以请记住……但仍在努力保持公正):

1-每个会话中是否有冗余数据?有什么可以跨会话共享的吗?如果是,则+1表示ehcache存储共享内容(因为ehcache针对高并发性进行了优化)

2-会话对象将有多大?在稳定状态下,您预计有多少并发用户?(换句话说,您需要为应用服务器上的会话存储分配多少内存?)

若会话占用空间总体上并没有那个么大,并且可以很好地适应您的堆而不会出现GC问题,那个么使用会话应该是一个很好的解决方案

但是它越大,您的java堆就需要越大……而且您就越需要使用巫毒把戏来控制垃圾收集和gc暂停时间。 通过使用ehcache,您可以集中存储多个会话可以访问的一些对象……从而整合内存占用(与1相同) 此外,通过使用ehcache的企业扩展(BigMemory=),您可以绕过堆限制并在堆外存储数据(根据需要-10s、100s GB或更多)。这样,需要存储在内存中的对象的大小就变得无关紧要了(当然,只要您可以向服务器添加RAM)

3-对于会话复制,JBOSS、Weblogic和Websphere等应用程序服务器都支持它。同样,这也是会话大小的问题(需要跨线路复制多少数据)。如果会话对象很大,并且有很多,那么集群中会有大量的网络流量……可以正常工作,也可以不正常工作。 在我看来,将核心对象放在为数据存储而优化的分布式EhCache层中,同时将会话保持在最小值(即登录/身份验证信息),肯定会增强会话复制机制


希望这能有所帮助。

您能澄清一下“应用服务器”是什么意思吗。它是一个成熟的服务器,比如JBoss,还是Tomcat?