【问题标题】:Is it possible to implement distributed caching using of Ehcache without Terracotta Enterprise Suite?是否可以在没有 Terracotta Enterprise Suite 的情况下使用 Ehcache 实现分布式缓存?
【发布时间】:2017-12-11 16:18:06
【问题描述】:

我试图找到如何为应用程序实现分布式缓存。

Ehcache 已经在我的项目中用于缓存,这就是我搜索如何使用它来解决这个问题的原因。 但是,不幸的是,似乎需要 Terracotta Enterprise Suite 并且它是商业的。不是吗? 是否有另一种解决方案如何使用 Ehcache 进行分布式缓存(RMI 或其他)?

【问题讨论】:

    标签: java ehcache distributed-caching


    【解决方案1】:

    您不需要 terracotta 企业套件来集群您的 Ehcache 实例。因此,您现在可以通过纯 OSS 使用 Ehcache 和 Terracotta 集群:

    http://www.ehcache.org/documentation/configuration/distributed-cache-configuration

    编辑:此链接已过期。以下是与集群缓存相关的新链接 http://www.ehcache.org/documentation/3.4/clustered-cache.html

    现在如果你需要复制,你可以使用 RMI 等其他机制:

    http://www.ehcache.org/documentation/replication/index

    不过,只有 Terracotta 集群才能为您带来 HA 和一致性保证等特性......

    【讨论】:

    • 我尝试将 Ehcache 与 Terracotta OSS 一起使用,但失败了 :( 我在不同的服务器(A,B)上有两个节点。每个节点都有自己的 ehcache.xml(CM)。每个 CM 都包含 并有一个名为TestCache 的缓存,其中包含。好的,“A”应用程序将项目放入缓存。现在,如果再次请求“A”-它将成功返回缓存的项目。但是“B”会错过缓存。正如我在开发控制台中看到的那样 - Terracotta 明白这是常见的缓存管理器,缓存对于两个应用程序也很常见。(因为它显示命中和未命中)我需要手动共享缓存吗?跨度>
    • 我的意思是,我需要为 tc-config.xml 或 ehcache.xml 设置一些额外的配置吗?在所有示例中,“根”元素用于“共享”缓存管理器。但是我在代码中没有任何 cacheManager 字段。所有这些都只在 ehcache.xml 中描述。此外,在 tc-config.xml 中有一个“instrumented-classes”设置。我是否需要手动列出所有缓存对象的类别?如果是这样,它看起来很奇怪,因为我希望 ehcache.xml 应该足够了。
    • 在 ehcache 中添加一个 terracottaConfig 元素,指向 Terracotta 服务器,并向您想要集群的每个缓存添加一个 terracotta 元素应该足以让您入门。您确定正在提取正确的 xml 文件吗?
    【解决方案2】:

    你也可以试试Hazelcast。它是开源的分布式缓存,非常易于使用。

    PS:我为 Hazelcast 工作

    【讨论】:

    • Hazelcast Enterprise(不是免费的,为了钱)是 WAN 复制所必需的。
    【解决方案3】:

    使用ehcache机制实现分布式缓存有多种方式。可以使用 RMI 或 Jgroups。

    在一个项目中,我遇到了同样的情况,经过一些研究,我发现使用 Redis 服务器进行缓存管理是一种简单有效的解决方案。

    我建议将此作为答案,因为如果您尝试使用 ehcache,这将花费时间并增加复杂性,并且您的工作区中可以有多个缓存管理器。

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 2011-02-15
      • 2013-06-02
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多