【问题标题】:Shared Caching in Java Across Multiple ApplicationsJava 中跨多个应用程序的共享缓存
【发布时间】:2020-03-28 05:30:32
【问题描述】:

我正在使用带有 CacheManager 和 Cacheable 的 Spring 缓存来缓存 10 个不同应用程序中同一张表中的相同数据。实现时的假设是,我们正在缓存的这些数据是元数据,不应更改。但是,他们正在更改这些数据,并且缓存永远不会被清除。

现在的要求是用 2 个大请求同时清除所有 10 个应用程序的缓存。

  1. 每当表从 mySQL Work Bench 上的直接 INSERT 语句更改时 应刷新所有应用程序缓存。我正在使用休眠和 Spring,但请记住插入发生在 缓存数据的应用程序。
  2. 如果我公开一个 API 来刷新缓存,它应该是 1 个将刷新的 API 所有 10 个应用程序。目前,缓存是私有的,不会暴露在应用程序之外。

是否有一些我可以实现的缓存机制,以便所有 10 个应用程序都使用相同的底层缓存。因此,如果我刷新 1,那么所有应用程序都将获得更新的数据。

我目前认为,并从研究中发现,将触发器放入数据库中以执行 Java 代码是一个坏主意。这些要求是不可能实现的吗?

缓存管理器:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/cache/CacheManager.html

【问题讨论】:

    标签: java spring caching


    【解决方案1】:

    如果这 10 个应用程序是同一个应用程序的实例,我想您可以定义一个新的 @RequestMapping("/clear-cache") 并在发生更改时调用所有这些应用程序。但是如果它们是不同的应用程序,那么这将是一团糟,除非代码是共享的。

    我假设数据的新鲜度并不重要,因为您提到缓存包含元数据。所以另一种选择是使用预定方法定期刷新所有缓存。

    另一种选择是以某种方式将此缓存集中在另一个进程(redis 等)中,以便您的所有应用程序从同一个缓存中获取它们的数据。

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多