Spring Boot - 缓存提供者

Spring Boot - 缓存提供者 首页 / Spring Boot入门教程 / Spring Boot - 缓存提供者

Spring Boot框架允许集成各种缓存提供程序,例如EhCache,Redis,Hazelcast,Infinispan,Caffeine等。缓存提供程序允许开发人员在应用程序中透明且显式地配置缓存。无涯教程应该使用缓存,因为它减少了执行次数并提高了应用程序的性能。

在Spring Boot中,缓存抽象不提供缓存的实际空间。它取决于org.springframework.cache.Cache或org.springframework.cache.CacheManager接口

缓存配置

Spring Boot Framework通过自动配置支持简化了缓存的实现。它在类路径中搜索库和配置文件,并在应用程序启动时初始化所需的依赖项Bean。缓存的自动配置包括以下步骤:

  • 在配置文件中添加注释 @EnableCaching
  • 在类路径中添加所需的缓存库
  • 在类路径的根目录中,为缓存提供程序添加配置文件

例如,如果要在应用程序中实现 EhCache ,请首先在配置文件中启用缓存。

@SpringBootApplication
@EnableCaching
public class Employee
{
  @Bean
  public CacheManager cacheManager()
  {
  //some code
  }
}

pom.xml 文件中添加 EhCache 依赖项。它将所需的库添加到类路径中。

<dependency>
  <groupId>org.ehcache</groupId>
  <artifactId>ehcache</artifactId>
</dependency>

最后,为高速缓存提供程序配置文件。在这里,使用的是EhCache,因此需要在类路径的根目录下配置 ehcache.xml 文件。

当没有定义类型为 CacheManager CacheResolver 的bean时,Spring Boot Framework会尝试检测以下缓存提供程序:

  1. Generic
  2. JCache
  3. EhCache
  4. Hazelcast
  5. Infinispan
  6. Couchbase
  7. Redis
  8. Caffeine
  9. Simple

如果Spring Boot在类路径中找到多个缓存提供程序,则在这种情况下,必须在 application.properties 文件中显式指定缓存提供程序。

spring.cache.ehcache.provider=net.sf.ehcache.CacheManager
spring.cache.ehcache.config=classpath:config/another-config.xml

无涯教程可以使用属性 spring.cache.type 设置特定的缓存提供程序。如果要禁用缓存,则在特定环境中使用它。

spring.cache.type=none

Spring Boot Framework提供了一个启动程序依赖关系,该依赖关系在应用程序中添加了基本的缓存依赖关系。默认情况下,启动程序缓存依赖项提供 spring-context-support 依赖项。

Note: 如果手动添加缓存依赖项,则必须在pom.xml文件中包含spring-context-support依赖项。因为,它提供了对Jcache,EhCache和Caffiene的支持。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

Spring Boot Framework自动配置CacheManager,可以通过实现 CacheManagerCustomizer 接口进一步对其进行自定义。

在以下示例中,无涯教程设置了一个标志,该标志将空值传递给主映射。

@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() 
{
  return new CacheManagerCustomizer<ConcurrentMapCacheManager>() 
  {
    @Override
    public void customize(ConcurrentMapCacheManager cacheManager) 
    {
      cacheManager.setAllowNullValues(false);
    }
  };
}

上面的bean需要一个自动配置的 ConcurrentMapCacheManager 。如果ConcurrentMapCacheManager没有自动配置,则定制器将不会以任何方式调用。可以使用注释 @Order @Ordered 对其进行排序。

通用缓存

如果spring-context-support定义了至少一个 org.springframework.cache.Cache bean,它将使用通用缓存。 CacheManager 捆绑了所有bean并对其进行了配置。

JCache

JCache是​​javax.cache.spi.CahingProvider提供的一个自启动过程。它存在于类路径JSR 107中。spring-boot-starter-cache提供了JCacheCacheManager,无涯教程也可以添加任何其他缓存库。

EhCache 2.x

EHCache是​​基于Java的,开源的且广泛使用的缓存。为了使用EhCache,应该使用以下依赖关系。

<dependency>
  <groupId>org.ehcache</groupId>
  <artifactId>ehcache</artifactId>
</dependency>

有两种方法可以配置EhCache:

  • 首先,通过配置Java POJO文件,其中所有配置参数都是通过EhCache API配置的。
  • 第二,通过配置XML文件,根据提供的架构定义在其中配置EhCache。

EhCache使用了一个名为 ehcache.xml的文件。 如果应用程序在类路径中找到该文件,则为spring-boot-starter-cache提供的 EhCacheCacheManager 。可以使用以下属性来配置XML 文件:

spring.cache.ehcache.config=classpath:config/demo-config.xml

Hazelcast

当在应用程序中启用缓存时,Spring Boot会自动将HazelcastInstance包装在CacheManager中。它在节点之间平均分配数据。可以使用以下属性来配置Hazelcast。

spring.hazelcast.config=classpath:config/demo-hazelcast.xml

如果未设置该属性,Spring Boot会尝试在类路径上找到hazelcast.xml(Hazelcast配置)文件。

Infinispan

Infinispan是嵌入式Java库。它用作高速缓存或数据网格。它以键值形式存储数据。它可以轻松地与JCache,JPA Quarkus,Spring等集成。

它没有默认文件位置,因此应该明确指定它。如果未显式指定infinispan,则它将使用默认引导程序。

spring.cache.infinispan.config=infinispan.xml 

Couchbase

当无涯教程实现 couchbase-spring-cache 并配置了Couchbase时,会自动配置 CouchebaseCacheManager 。与缓存有关的所有操作都在 Bucket 中执行。它允许通过设置属性 spring.cache.cache-name 来创建其他缓存(如果需要)。

假设需要三个名为 cacheA cacheB, cacheC 的缓存。 cacheA和cacheB位于主存储桶(即自动配置的存储桶)上。 cacheC位于另一个存储桶上,该存储桶可以存活几秒钟,例如4秒钟。因此,可以通过指定属性来创建cacheA和cacheB,如下所示:

spring.cache.cache-names=cacheA, cacheB

Redis

当配置Redis时,RedisCacheManager是自动配置的。它还允许使用属性spring.cache.cache-names创建其他缓存。可以使用属性spring.cache.redis.*实现默认配置。

通过使用RedisCacheConfiguration bean,可以完全控制默认配置。

spring.cache.cache-names=cacheA, cacheB
spring.cache.redis.time-to-live=100000

上面的属性配置了两个名为cacheA和cacheB的缓存,它们的缓存时间为10分钟。

Caffeine

Caffeine是基于Java的缓存库。它还提供了一个内存中缓存。如果spring-boot-starter-cache依赖项在类路径中找到了Caffeine,则它会自动配置CaffeineCacheManger。如果要在应用程序中使用Caffeine,则需要添加以下依赖项:

<dependency>
  <groupId>com.github.ben-manes.caffeine</groupId>
  <artifactId>caffeine</artifactId>
  <version>2.7.0</version>
</dependency>

通过使用Caffeine缓存,无涯教程可以使用属性 spring.cache.caffeine.spec来定义缓存的大小生存时间例如:

spring.cache.cache-names=cacheA,cacheB
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s

上面的配置创建两个名为cache1和cache2的缓存。缓存的最大大小为 500 ,而实时缓存的最大时间为 6 秒。

Simple

这是默认实现。如果未指定缓存提供程序。如果Spring Boot在类路径中找不到任何缓存提供者,它将配置 ConcurrentHashMap 作为缓存存储。

例如,如果需要两个缓存,请使用以下属性设置它们的名称:

spring.cache.cache-names=cache1,cache2

None

当通过使用@EnableCaching注释启用缓存时,应用程序需要合适的配置。当要在特定环境中disable缓存时使用。无涯教程使用属性 spring.cache.type 禁用缓存。

spring.cache.type=none

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

邱岳的产品手记 -〔邱岳〕

从0开始学架构 -〔李运华〕

技术管理实战36讲 -〔刘建国〕

Go语言从入门到实战 -〔蔡超〕

攻克视频技术 -〔李江〕

Serverless进阶实战课 -〔静远〕

后端工程师的高阶面经 -〔邓明〕

Rust 语言从入门到实战 -〔唐刚〕

Midjourney入门实践课 -〔Jovi〕

好记忆不如烂笔头。留下您的足迹吧 :)