SpringBoot中使用ehcache做缓存,集群间不进行缓存同步

近期在搞国产软件改造的过程中,发现在未改动代码和配置的情况下,ehcahe集群之间缓存消息无法正常同步
PS:集群中一台机器重启后会拉取集群缓存信息,实现单次同步,后续则不再继续同步

img

当ehcache集群中的一台机器重启后,它会拉取集群缓存信息以实现单次同步。然而,后续却不再继续同步。这可能是由于以下原因导致的:

配置问题:请确保在ehcache配置中启用了集群通信和同步的相关参数。检查您的配置文件,例如ehcache.xml,确保它包含了适当的集群配置信息。

防火墙或网络问题:检查防火墙设置,确保集群中的机器之间可以进行通信。还要确保网络连接稳定,以避免因网络中断或延迟导致消息同步失败。

机器标识问题:在ehcache集群中,每台机器都应该有独特的标识符。这个标识符在集群中用于识别和同步缓存信息。如果机器重启后更改了标识符,可能会导致同步失败。请确保每台机器的标识符在重启后保持不变。

如果您已经确认了以上问题,并且仍然无法解决同步问题,您可能需要进一步检查ehcache的日志文件,以查看是否有任何错误或警告信息。此外,您还可以考虑升级ehcache版本,以获得更好的集群同步功能和稳定性。

  • 这篇文章:spring boot中使用ehcache将缓存保存到硬盘中注意的问题 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: Spring Boot 2.x基础教程:使用EhCache缓存集群中的 进一步思考 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 上一篇发布的时候,公众号上有网友留言问,数据更新之后怎么办?

    其实当构建了缓存集群之后,就比较好办了。比如这里的例子,需要做两件事:

    1. save操作增加@CachePut注解,让更新操作完成之后将结果再put到缓存中
    2. 保证缓存事件监听的replicateUpdates=true,这样数据在更新之后可以保证复制到其他节点

    这样就可以防止缓存的脏数据了,但是这种方法还并不是很好,因为缓存集群的同步依然需要时间,会存在短暂的不一致。同时进程内的缓存要在每个实例上都占用,如果大量存储的话始终不那么经济。所以,很多时候进程内缓存不会作为主要的缓存手段。下一篇将具体说说,另一个更重要的缓存使用!

    欢迎关注本系列教程:《Spring Boot 2.x基础教程》