SpringBoot框架允许集成各种 缓存提供程序,例如 EhCache、Redis、Hazelcast、Infinispan、Caffeine,等。缓存提供程序允许开发人员在应用程序中透明且显式地配置缓存。我们应该使用缓存,因为它减少了执行次数并提高了应用程序的性能。
在Spring中引导,缓存抽象未提供缓存的实际空间。这取决于 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 ,Spring Boot Framework会尝试检测以下缓存提供程序:
Generic JCache EhCache Hazelcast Infinispan Couchbase Redis Caffeine 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 依赖项。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.3.RELEASE</version> </dependency>
Spring Boot Framework自动配置CacheManager,可以通过实现 CacheManagerCustomizer 接口进一步对其进行自定义。
在follwoig示例中,我们设置了一个传递标记主映射的空值。
@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.Cache bean,它将使用通用缓存。 CacheManager 捆绑并配置了所有bean。
JCache是由 javax.cache.spi.CahingProvider。。它位于类路径JSR 107中。spring-boot-starter-cache提供了 JCacheCacheManager。我们也可以添加其他任何缓存库。
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
当我们在应用程序中启用缓存时,Spring Boot会自动将 HazelcastInstance 包装在CacheManager中。它在节点之间平均分配数据。我们可以使用以下属性来配置Hazelcast。
spring.hazelcast.config=classpath:config/demo-hazelcast.xml
如果未设置该属性,Spring Boot会尝试在类路径中找到 hazelcast.xml (Hazelcast配置)文件。
Infinispan是嵌入式 Java 库。它用作 缓存或 数据网格。它以 键值形式存储数据。它可以轻松地与JCache, JPA Quarkus, Spring 等。
它没有默认文件位置,因此我们应该明确指定它。如果未明确指定infinispan,则会使用默认的引导程序。
spring.cache.infinispan.config=infinispan.xml
当我们实现 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 时,将自动配置 RedisCacheManager 。它还允许我们使用属性 spring.cache.cache-names 创建其他缓存。可以使用属性 spring.cache.redis。* 实现默认配置。
我们可以使用 RedisCacheConfiguration 完全控制默认配置。 strong>豆。
spring.cache.cache-names=cacheA, cacheB spring.cache.redis.time-to-live=100000
以上属性配置了两个缓存,分别称为cacheA和cacheB,它们的寿命为10分钟。
咖啡因是基于Java的缓存库。它还提供了一个内存中缓存。如果spring-boot-starter-cache依赖项在类路径中找到了Caffeine,它会自动配置 CaffeineCacheManger 。如果要在应用程序中使用咖啡因,则需要添加以下依赖项:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.7.0</version> </dependency>
通过咖啡因缓存,我们可以使用属性 spring.cache.caffeine.spec定义缓存的大小和生存时间。 例如:
spring.cache.cache-names=cacheA,cacheB spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
上面的配置创建两个名为cache1和cache2的缓存。缓存的最大大小为 500 ,最长生存时间为 6 秒。
这是默认实现。如果未指定缓存提供程序。如果Spring Boot在类路径中找不到任何缓存提供程序,则会将 ConcurrentHashMap 配置为缓存存储。
例如,如果我们需要两个缓存,请使用设置它们的名称。以下属性:
spring.cache.cache-names=cache1,cache2
当我们使用注解@EnableCaching启用缓存时,应用程序需要合适的配置。当我们要在特定环境中 禁用缓存时使用。我们使用属性 spring.cache.type 禁用缓存。
spring.cache.type=none