Spring Boot – Cache Provider
Spring 框架支持透明地向应用程序添加缓存。Cache Provider授权程序员在应用程序中明确配置缓存。它整合了各种Cache Provider,例如EhCache、Redis、Guava、Caffeine等 。
它使经常访问的对象、图像和数据更靠近您需要它们的位置,通过不多次访问数据库或任何第三方应用程序来加快访问速度并节省金钱成本。不经常更改的数据可以缓存。在 Spring Boot 中,缓存抽象依赖于两个接口(即org.springframework.cache.CacheManager接口或org.springframework.cache.Cache接口)发生的抽象。
缓存的自动配置
Spring Boot 框架通过实现缓存中的自动配置支持来简化和降低复杂性。它在应用程序启动时搜索类路径中的库和配置文件并初始化所需的依赖项 bean。只要通过 @EnableCaching 注释启用缓存,Spring Boot 就会自动配置缓存基础架构。
如果我们不添加任何特定的缓存库,Spring Boot 会自动配置一个使用内存中并发映射的简单提供程序,但并不建议在生产中使用。
要将缓存添加到应用程序的操作中,我们需要在其方法中添加@Cacheable注释,
// Annotation @Component // Class public class Student { // Annotation @Cacheable("Names") // Method public int getName(String name) {} }
现在,在调用getName()方法之前,抽象会在名称缓存中查找与名称参数匹配的条目。如果找到条目,则立即将缓存中的内容返回给调用者,并且不会调用该方法。否则,将调用该方法,并在返回值之前更新缓存。
Spring Boot Cache Provider
缓存抽象不提供实际的存储,而是依赖于org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现的抽象。如果我们没有定义CacheManager类型的 bean或名为cacheResolver的CacheResolver ,Spring Boot 将尝试检测以下提供程序:
- Generic
- JCache (JSR-107)
- EhCache 2.x
- Hazelcast
- Guava
- Infinispan
- Couchbase
- Redis
- Caffeine
- Simple
为了快速添加基本缓存依赖项,我们必须在pom.xml 文件中使用spring-boot-starter-cache 。如果我们想手动添加依赖项,我们必须在pom.xml文件中包括spring-context-support才能使用JCache、EhCache 2.x 或 Guava支持。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.3.RELEASE</version> </dependency>
为了在类路径中添加所需的库,我们需要在 pom.xml 中添加EhCache依赖项,如下所示:
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
Provider 1: Generic
Generic缓存用于定义至少一个org.springframework.cache.Cache bean 的上下文中。将创建一个包装该类型所有 bean 的 CacheManager。
Provider 2: JCache
JCache 从类路径上存在javax.cache.spi.CachingProvider开始, JCacheCacheManager由spring-boot-starter-cache “Starter”提供。可能会出现多个提供程序的情况,在这种情况下必须明确指定提供程序。即使 JSR-107 标准没有强制使用标准化的方式来定义配置文件的位置,Spring Boot 也可以设置缓存,其实现细节如下图所示:
# Only necessary if more than one provider is present spring.cache.jcache.provider=com.acme.MyCachingProvider spring.cache.jcache.config=classpath:acme.xml
如果缓存库同时提供原生实现和JSR支持,Spring Boot 优先考虑JSR支持。
Provider 3: EhCache 2.x
Ehcache 2.x 是一个开源的、基于标准的缓存,可提高性能、减轻数据库负担并简化可扩展性。它是使用最广泛的基于 Java 的缓存,因为它功能强大、久经考验、功能齐全,并且可与其他流行的库和框架集成。如果可以在类路径的根目录中找到名为ehcache.xml的文件,则使用 EhCache 2.x。如果找到 EhCache 2.x,则使用spring-boot-starter-cache “Starter”提供的EhCacheCacheManager来引导缓存管理器。它从进程内缓存一直扩展到具有 TB 级缓存的混合进程内/进程外部署。我们可以使用以下属性配置 EhCache:
spring.cache.ehcache.config=classpath:config/demo-config.xml
Provider 4: Hazelcast
Hazelcast 实际上是一个流式和内存优先的应用程序平台,适用于本地、边缘或完全托管的云服务的快速、有状态、数据密集型工作负载。Spring Boot 对Hazelcast具有一般支持。如果已自动配置HazelcastInstance ,则除非指定了spring.cache.jcache.config属性,否则它将自动包装在CacheManager中。我们可以使用以下属性配置 Hazelcast:
spring.hazelcast.config=classpath:config/demo-hazelcast.xml
Provider 5: Guava
Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如多映射和多集)、不可变集合、图库以及用于并发、I/O、哈希、缓存、基元、字符串等的实用程序。Guava 是一个单一的 JAR,提供缓存以及许多其他功能。我们可以通过以下方式配置applicationConfig.xml文件:
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/>
Provider 6: Infinispan
Infinispan 是一个开源的内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。它可以轻松与 JCache、JPA Quarkus、Spring 等集成。它提供了一个键/值数据存储,可以保存所有类型的数据,从 Java 对象到纯文本。Infinispan 没有默认的配置文件位置,因此必须明确指定。否则,将使用默认引导程序。
spring.cache.infinispan.config=infinispan.xml
Provider 7: Couchbase
如果Couchbase和couchbase-spring-cache实现可用且已配置,则CouchbaseCacheManager会自动配置。我们可以通过设置spring.cache.cache-names属性在启动时创建其他缓存。这些缓存在自动配置的Bucket上运行。我们还可以使用定制器在另一个Bucket上创建其他缓存。我们可以通过配置在一个 Bucket 中创建两个缓存,如下所示:
spring.cache.cache-names=cache1,cache2
Provider 8: Redis
如果Redis可用且已配置,则RedisCacheManager会自动配置。我们可以在启动时通过设置spring.cache.cache-names属性创建其他缓存,并且可以使用属性spring.cache.redis.*配置缓存默认值。
以下配置创建两个名为 cache1 和 cache2 的缓存,其生存期为 1 分钟。
spring.cache.cache-names=cache1,cache2 spring.cache.redis.time-to-live=60000
Provider 9: Caffeine
如果 Caffeine 存在并配置, CaffeineCacheManager (由 spring-boot-starter-cache“Starter”提供)将自动配置。Caffeine 取代了对 Guava 的支持。可以通过设置spring.cache.cache-names属性在启动时创建缓存。
以下配置创建 cache1 和 cache2 缓存,其最大大小为 100,生存时间为 1 分钟:
spring.cache.cache-names=cache1,cache2 spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=60s
要在 Spring Boot 应用程序中使用 Caffeine,我们需要在 pom.xml 中添加 Caffeine 依赖项,如下所示:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency>
Provider 10: Simple
如果没有提及其他提供程序,则配置使用ConcurrentHashMap作为缓存存储的简单实现。仅当应用程序中不存在缓存库时才会使用它。我们可以通过设置cache-names属性来限制可用缓存的列表。如果我们只想要 cache1 和 cache2 缓存,请按如下方式设置cache-names属性:
简单Cache Provider的依赖项
spring.cache.cache-names=cache1,cache2标签:cache,Spring,Cache,Boot,Provider,缓存,spring From: https://blog.csdn.net/xt14327/article/details/144222384