当前位置: 首页 > 面试题库 >

Spring Boot,使用EhCache进行缓存

东方辉
2023-03-14
问题内容

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

  1. 我是否需要其他服务器进行Ehcache?
  2. 我是否需要其他客户端来使用Ehcache?
  3. Ehcache如何与多个实例一起使用?甚至可以使用Ehcache创建类似共享缓存的内容吗?

问题答案:

我是否需要其他服务器进行Ehcache?

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

  1. 分布式 –数据保存在远程服务器(或服务器阵列)中,每个应用程序节点中保存有一部分最近使用的数据。此拓扑提供了一组丰富的一致性选项。在集群或横向扩展应用程序环境中,推荐使用分布式拓扑。它提供了最高水平的性能,可用性和可伸缩性。

分布式拓扑可作为Terracotta开源产品提供,没有客户端限制,但对Terracotta群集大小有限制。使用商用BigMemory
Max
时,这些将被删除。

  1. 复制 -缓存的数据集保存在每个应用程序节点中,并且无需锁定即可在节点之间复制或使数据无效。复制可以是异步的也可以是同步的,其中传播发生时写线程将阻塞。此拓扑唯一支持的一致性模式是弱一致性。

我是否需要其他客户端来使用Ehcache?

您应该使用Ehcache库才能与Ehache通信。但是Spring提供了一个缓存抽象,它可以更优雅地工作,并且还具有独立于底层缓存实现的优点。因此,如果您使用Spring
Caching
Abstraction,则可以轻松地从Ehcache切换到Hazelcast。您可以在此处阅读有关Spring Caching Abstraction的更多信息。

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

Ehcache如何与多个实例一起使用?甚至可以使用Ehcache创建类似共享缓存的内容吗?

引用Ehcache文档:

Ehcache提供了进程内缓存,您可以在多个节点之间进行复制。它还是Terracotta的商业缓存和内存中数据存储产品BigMemory
Go和BigMemory Max的核心。BigMemory
Max随附的Terracotta服务器阵列可实现具有TB级缓存的混合进程内/进程外配置。有关Terracotta的BigMemory产品的信息,请参阅http://terracotta.org/documentation上的BigMemory
Go和BigMemory Max产品文档。

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



 类似资料:
  • 我使用EhCache框架来缓存应用程序数据,并考虑使用JGroups缓存复制来复制集群环境中的缓存。 它真的是集群环境中缓存复制的行业标准吗?或者,我应该考虑其他更好的选择。请注意,此时我没有使用任何集中式缓存服务器。我已经在JGroups缓存复制上做了POC。你能就它的健壮性和主要关注点分享你的经验吗?使用JGroups进行缓存复制的利弊是什么?

  • 我尝试了几种方法在Spring Boot应用程序上实现缓存,这似乎是正确的方法,但它只是记录 我有一个事件记录器,但我没有看到它的任何输出: 缓存配置 缓存打开方法 ehcache.xml位于资源下 grad le dependencies < code > spring boot version = ' 2 . 0 . 2 . release ' 我看了很多帖子和博客,似乎我做的是正确的,但我一

  • 我在我的web应用程序中使用hibernate ehcache。我缓存了列表,如下所示。 EHCACHE.xml 我的输出: 我的Ebtity Class: 每次放置计数增加 11。但没有其他值更改。为什么第二级缓存未命中? 为什么每次都执行查询而不是从二级缓存中获取结果? 为什么第二级放置计数在我命中它应该更新而不是插入的同一查询时增加?任何帮助都将不胜感激!!!

  • 我在使用AFNetworking和ETag值实现缓存时遇到问题。我的服务器为每个请求返回Cache-Control和ETag头值。但如果我再次请求相同的资源,AFNetworking将不会添加ETag。我应该手动保存每个响应的etag并将其附加到下一个请求吗? 在应用程序委托中,我已经设置了缓存对象: 另外,我使用的是AFHTTPRequestSerializer的默认缓存策略。 有什么想法吗?问

  • 问题内容: 我正在生产中运行大型VM,并且想在运行时了解有关我的缓存大小的更多信息。我的缓存都是基于ehache 在运行时查看单个缓存大小的最佳方法是什么。使用JMX或API 是否可以通过对CacheManager的纯Java调用来配置任何选项,或者(暂时忽略JMX)必须以大字符串构建XML配置? 问题答案: 是的,使用Ehcache,您可以配置缓存并仅通过Java代码(没有XML配置)来检索其大

  • 我的情况是,我有Grails 2.1.2应用程序,并希望引入使用缓存插件和cache-ehcache插件作为实现的方法级缓存。 我的缓存配置为在内存中,如下所示: 我有一个像这样的方法,它只接受int参数,所以密钥生成不是问题: 我的问题是,当调用这个方法时,我得到了一个< code > Java . lang . out of memory error:Java heap space 异常。原因