gpt4 book ai didi

spring - 我应该使用 Spring Session Scoped beans 还是诸如 ehcache 之类的缓存?

转载 作者:行者123 更新时间:2023-12-02 05:53:48 25 4
gpt4 key购买 nike

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

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

这是否是 session 作用域 bean 的适当使用,还是缓存 (ehcache) 更适合?

除非确实有必要,否则我们不愿意采用缓存技术。

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

感谢任何指导。

最佳答案

对此的一些想法(免责声明:我为 terracotta/ehcache 工作...所以请记住这一点...但仍然试图在这里保持公正):

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

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

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

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

3 - 对于 session 复制,JBOSS、Weblogic、Websphere 等应用服务器都支持它。同样,这又是 session 大小的问题(需要通过网络复制多少数据)。如果您的 session 对象很大,并且有很多 session 对象,那么您的集群中将会有大量的网络流量……可能会或可能不会正常工作。在我看来,在针对数据存储进行优化的分布式 EhCache 层中拥有核心对象,同时将 session 保持在最低限度(即登录/身份验证信息)肯定会增强 session 复制机制。

希望有帮助。

关于spring - 我应该使用 Spring Session Scoped beans 还是诸如 ehcache 之类的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com