java - Tomcat 内存缓存 - 集群上的复制

标签 java tomcat caching

我有一个关于 Tomcat 集群的问题。我有一个 Java 应用程序,我们在其中实现了内存缓存。所以基本上当 Tomcat 启动时,它会从数据库中加载一些对象。这些对象像静态对象一样存储在tomcat内存中。因此,每当我们从应用程序更新某些内容时,它都会写入数据库并更新内存中的对象。

我的问题是,如果我们在2个或更多节点的tomcat中实现集群,那些缓存的对象是否也被共享?那可能吗?我不认为是。可以使用 tomcat 增量管理器或备份管理器提供的 session 复制来共享 HttpSession 对象。但是内存中的东西也可以共享吗?

此外,正在运行的批处理作业会怎样?它们是否还会运行多次,因为集群中将有多个 tomcat 实例,并且每个实例都会触发该作业?那也是失败的。

有什么想法\想法吗?

最佳答案

如果你在内存中保存了一些东西,它不会被复制,除非你专门实现一些东西来将它发送到其他机器。每个 jvm 保持它们的内存彼此独立。

一般来说,如果你想要复制缓存,一个好的解决方案是使用 ehcache ( http://www.ehcache.org/ )。

关于批处理作业,这取决于您使用的库,但通常,如果您使用已建立的库(如 http://www.quartz-scheduler.org/ ),它应该能够确保只有一个实例运行该作业。也许您需要配置。

重要的是要进行测试,以确保您实现的任何解决方案都能真正发挥您的预期作用。

祝你好运!

关于java - Tomcat 内存缓存 - 集群上的复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320143/

相关文章:

Java:按钮未显示

java - 两个属性和一个具有所述属性的对象哪个更实用?

java - 如何在该本地主机 :8080/test/index. html 中打开我的资源?

c# - 为多个ASP.NET用户缓存WCF ChannelFactories

c - 为什么双链表中的指针追逐可以避免缓存抖动(自驱逐)?

java - Spring 缓存抽象和 Ehcache 的问题

java - AndEngine - Admob黑屏

java - 谷歌应用引擎数据存储字符串编码问题

java - Maven多模块tomcat部署,模块丢失

java - 无法将 Tomcat 作为 Windows 服务启动