Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不同的JVM移出缓存_Java_Spring_Hibernate_Caching - Fatal编程技术网

Java 从不同的JVM移出缓存

Java 从不同的JVM移出缓存,java,spring,hibernate,caching,Java,Spring,Hibernate,Caching,我正在Spring/Hibernate应用程序中使用EHCache。但数据库在主应用程序和另一个较小的应用程序之间共享(每个应用程序都在单独的JVM中运行)。各方都可以更改数据库数据 这里的问题是,在第三方进行更改后,主应用程序的缓存变得无效,因为它对这些更改一无所知 我的第一个想法是不通知主应用程序(例如通过JMS)具有特定ID的实体已更改,并且在主应用程序内部,我可以显式地将其从缓存中逐出。这可以解决问题,但可能还有其他一些最佳做法可以在这里应用?这里的最佳做法是认识到,每当您有独立进程访问

我正在Spring/Hibernate应用程序中使用EHCache。但数据库在主应用程序和另一个较小的应用程序之间共享(每个应用程序都在单独的JVM中运行)。各方都可以更改数据库数据

这里的问题是,在第三方进行更改后,主应用程序的缓存变得无效,因为它对这些更改一无所知


我的第一个想法是不通知主应用程序(例如通过JMS)具有特定ID的实体已更改,并且在主应用程序内部,我可以显式地将其从缓存中逐出。这可以解决问题,但可能还有其他一些最佳做法可以在这里应用?

这里的最佳做法是认识到,每当您有独立进程访问共享可变状态时,您无法保证任何给定进程都会看到该状态的最新版本。因此,进行相应的设计,如果您必须查看最新状态,请绕过缓存并使用事务。但这不适合我。主应用程序始终处理数据,而副应用程序可以每小时更新一次数据。我不想绕过主应用程序中的缓存。请重新阅读我写的内容。您正在处理分布式系统的一个基本问题。要么您需要最新状态,在这种情况下您不能使用缓存,要么您不需要最新状态,在这种情况下,您可以将系统设计为使用过时的数据。在应用程序之间添加通信当然可以减少过时数据的窗口,但不能消除它。同意,这里我有两种可能性。在特定情况下,我需要选择缓存。什么样的通知方式最适合这里?在其他应用程序完成其工作时通知主应用程序,并使用该通知清除整个缓存。不要试图逐出单个对象。使用你熟悉的任何技术。