Spring Boot,使用EhCache进行缓存

10

我需要在我的应用程序中缓存一些数据,考虑使用Ehcache。我有几个问题:

  1. 我是否需要为Ehcache再准备另外一个服务器?
  2. 我是否需要另外一个客户端来与Ehcache配合工作?
  3. Ehcache如何处理多个实例?是否可能使用Ehcache创建类似共享缓存的东西?
2个回答

12

我需要为Ehcache再开一个服务器吗?

您可以在独立模式下使用Ehcache。在这种拓扑结构中,缓存数据保存在应用程序节点中。因此,在此模式下,您不需要另一台服务器。Ehcache还提供另外两种模式

  1. 分布式 - 数据保存在远程服务器(或一组服务器)中,每个应用程序节点都保存一部分最近使用的数据。这种拓扑结构提供了丰富的一致性选项。在集群或扩展的应用环境中,分布式拓扑结构是推荐的方法。它提供了最高水平的性能、可用性和可伸缩性。

    分布式拓扑结构作为Terracotta开源方案提供,没有客户端限制,但有Terracotta集群大小的限制。如果使用商业版BigMemory Max则可以解除这些限制。

  2. 复制 - 缓存数据集保存在每个应用程序节点中,数据在节点之间进行复制或使其无效,而不会锁定。复制可以是异步或同步的,写入线程在传播时会阻塞。此拓扑结构仅支持弱一致性模式。

我需要另一个客户端才能使用Ehcache吗?

您应该使用Ehcache库以便能够与Ehache通信。但是,Spring提供了一个更优雅的缓存抽象,也具有独立于底层缓存实现的优点。因此,如果您使用Spring缓存抽象,可以轻松地从Ehcache切换到Hazelcast等其他缓存实现。您可以在这里阅读有关Spring缓存抽象的更多信息。

Spring Boot提供spring-boot-starter-cache启动程序包,根据实现自动配置适当的CacheManager只要启用了缓存支持。

Ehcache如何处理多个实例?是否可能创建类似共享缓存的东西使用Ehcache?

引用自Ehcache文档:

Ehcache提供进程内缓存,您可以在多个节点之间复制它。它还是BigMemory Go和BigMemory Max的核心,Terracotta的商业缓存和内存数据存储产品。与BigMemory Max一起提供的Terracotta Server Array使混合进程/外部进程配置成为可能,具有TB级别的缓存。有关Terracotta的BigMemory产品,请参见http://terracotta.org/documentation中的BigMemory Go和BigMemory Max产品文档。

如上所述,Ehcache提供了免费的集群选项。对于此要求,Redis和Hazelcast也是不错的选择。


1
请注意,Ehcache有一个开源的集群选项。请参阅http://terracotta.org/downloads/open-source/catalog。 - Louis Jacomet
@LouisJacomet 我已将答案设为社区维基。因此,如果您愿意,可以添加有关Ehcache及其开源解决方案的更多详细信息。顺便说一句,我真的很喜欢你和Alex在devoxx比利时关于缓存101的演讲! - Ali Dehghani

3
文档和示例应该可以解答您所有的问题:
https://spring.io/blog/2015/06/15/cache-auto-configuration-in-spring-boot-1-3 https://github.com/spring-projects/spring-boot/tree/1.3.x/spring-boot-samples/spring-boot-sample-cache
当然,您可以在Spring Boot应用程序中使用内嵌EhCache,如果您想共享缓存,则取决于您的架构。您可以公开REST端点以使缓存可供其他应用程序使用。
如果您想要一个分布式、扩展、高性能的缓存,您可能需要看一下Hazelcast。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接