【问题标题】:Spring Caching: evict entry remotelySpring Caching:远程驱逐条目
【发布时间】:2018-09-26 00:28:56
【问题描述】:

我有 2 个微服务读取/写入同一个数据库。在其中之一中,我缓存了某些实体的 REST 端点的结果。我也有@CachePut@CacheEvict 来控制实体的生命周期。

现在,第二个微服务出现了:它也可以修改第一个返回的实体。

我的问题是:在这种情况下是否有任何远程缓存条目驱逐机制?当然,我可以通过在第一个微服务中公开“重置”端点并从第二个微服务调用它来手动完成。但我希望有一些内置机制,也许在 Spring Cloud 中。

【问题讨论】:

  • 我会避免让微服务知道其他微服务管理的缓存,更不用说通过调用暴露的服务来负责驱逐缓存条目。除了可能的架构违规(多个服务共享数据库实体?),为什么这不是异步的、基于事件的?发生了一些事情(我修改了一些东西),服务发布了这个事实。任何感兴趣的人都可以响应该事件,包括管理自己的缓存。

标签: spring caching microservices spring-cloud spring-cache


【解决方案1】:

我相信缓存复制解决方案将是一个不错的选择。 service 1 在其缓存中所做的任何更改都将通过 TCP/UDP 复制到 service 2 的缓存中,反之亦然 - 取决于您的配置。

有多个开箱即用的缓存提供程序(例如 EHCache)。


我的配置如下所示:

...
<!-- Set up Cache peer provider factory --> <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory" propertySeparator="," properties="replicateAsynchronously=true,replicatePuts=true,replicateUpdates=true,replicateUpdatesViaCopy=false,replicateRemovals=true"/>
<!-- Set up Cache peer listener factory --> <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
...


查看this (EHCache replication) - 可能会有所帮助。

【讨论】:

  • 听起来很有希望!你真的用 Spring Cache API 测试过,包括@CachePut@CacheEvict 注解?
  • 是的,当前通过 UDP 自动配置在同一个机器上运行多个实例。适用于整个 Spring 缓存套件。
猜你喜欢
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多