📅  最后修改于: 2021-01-11 05:39:17             🧑  作者: Mango
Spring Boot框架允许集成各种缓存提供程序,例如EhCache,Redis,Hazelcast,Infinispan,Caffeine等。缓存提供程序允许开发人员在应用程序中透明且显式地配置缓存。我们应该使用缓存,因为它减少了执行次数并提高了应用程序的性能。
在Spring Boot中,缓存抽象不提供缓存的实际空间。它取决于org.springframework.cache.Cache或org.springframework.cache.CacheManager接口发生的抽象。
Spring Boot Framework通过自动配置支持简化了缓存的实现。它在类路径中搜索库和配置文件,并在应用程序启动时初始化所需的依赖项Bean。缓存的自动配置包括以下步骤:
例如,如果我们要在应用程序中实现EhCache ,则首先在配置文件中启用缓存。
@SpringBootApplication
@EnableCaching
public class Employee
{
@Bean
public CacheManager cacheManager()
{
//some code
}
}
在pom.xml文件中添加EhCache依赖项。它将所需的库添加到类路径中。
org.ehcache
ehcache
最后,为高速缓存提供程序配置文件。在这里,我们使用的是EhCache,因此需要在类路径的根目录下配置ehcache.xml文件。
当我们没有定义CacheManager或CacheResolver类型的bean时,Spring Boot Framework会尝试检测以下缓存提供程序:
如果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依赖项。
注意:如果我们手动添加缓存依赖项,则必须在pom.xml文件中包含spring-context-support依赖项。因为,它提供了对Jcache,EhCache和Caffiene的支持。
org.springframework
spring-context-support
5.2.3.RELEASE
Spring Boot Framework自动配置CacheManager,可以通过实现CacheManagerCustomizer接口进一步对其进行自定义。
在follwoig示例中,我们设置了一个标志,该标志将空值传递到主映射。
@Bean
public CacheManagerCustomizer cacheManagerCustomizer()
{
return new CacheManagerCustomizer()
{
@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是javax.cache.spi.CahingProvider提供的一个自启动过程。它存在于类路径JSR 107中。spring-boot-starter-cache提供了JCacheCacheManager。我们也可以添加任何其他缓存库。
注意:如果缓存库同时提供本机实现和JSR支持,则Spring Boot首选JSR支持。
EHCache是基于Java的,开源的且广泛使用的缓存。为了使用EhCache,我们应该使用以下依赖关系。
org.ehcache
ehcache
有两种方法可以配置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是嵌入式Spring等集成。
它没有默认文件位置,因此我们应该明确指定它。如果未明确指定infinispan,则它将使用默认引导程序。
spring.cache.infinispan.config=infinispan.xml
当我们执行couchbase弹簧缓存的CouchebaseCacheManager自动配置,并Couchbase配置。与缓存相关的所有操作都在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 bean,我们可以完全控制默认配置。
spring.cache.cache-names=cacheA, cacheB
spring.cache.redis.time-to-live=100000
上面的属性配置两个名为cacheA和cacheB的缓存,它们的寿命为10分钟。
咖啡因是基于Java的缓存库。它还提供了一个内存缓存。如果spring-boot-starter-cache依赖项在类路径中找到了Caffeine ,则它会自动配置CaffeineCacheManger。如果要在应用程序中使用咖啡因,则需要添加以下依赖项:
com.github.ben-manes.caffeine
caffeine
2.7.0
咖啡因缓存允许我们使用属性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