Spring Boot 缓存提供程序2025年3月18日 | 阅读 5 分钟 Spring Boot 框架允许集成各种缓存提供程序,例如 EhCache、Redis、Hazelcast、Infinispan、Caffeine 等。缓存提供程序允许开发人员在应用程序中透明且显式地配置缓存。我们应该使用缓存,因为它减少了执行次数并提高了应用程序的性能。 在 Spring Boot 中,缓存抽象不提供缓存的实际空间。它依赖于由 org.springframework.cache.Cache 或 org.springframework.cache.CacheManager 接口发生的抽象。 缓存自动配置Spring Boot 框架通过自动配置支持简化了缓存的实现。它在类路径中搜索库和配置文件,并在应用程序启动时初始化所需的依赖项 bean。缓存的自动配置包括以下步骤
例如,如果我们想在应用程序中实现 EhCache,首先我们在配置文件中启用缓存。 在 pom.xml 文件中添加 EhCache 依赖项。它将所需的库添加到类路径中。 最后,配置缓存提供程序的 文件。在这里,我们使用 EhCache,因此需要在类路径的根目录下配置 ehcache.xml 文件。 当我们未定义类型为 CacheManager 或 CacheResolver 的 bean 时,Spring Boot 框架尝试检测以下缓存提供程序
如果 Spring Boot 在类路径中找到了多个缓存提供程序,在这种情况下,我们必须在 application.properties 文件中明确指定缓存提供程序。 我们可以使用属性 spring.cache.type 设置特定的缓存提供程序。如果我们要禁用缓存,则在特定环境中使用它。 Spring Boot 框架提供了一个启动器依赖项,该依赖项将基本的缓存依赖项添加到应用程序中。默认情况下,启动器缓存依赖项提供了 spring-context-support 依赖项。 注意:如果我们要手动添加缓存依赖项,则必须在 pom.xml 文件中包含 spring-context-support 依赖项。因为,它提供了对 Jcache、EhCache 和 Caffiene 的支持。Spring Boot 框架会自动配置 CacheManager,可以通过实现 CacheManagerCustomizer 接口进行进一步自定义。 在以下示例中,我们设置了一个标志,将空值传递给主映射。 上面的 bean 期望一个自动配置的 ConcurrentMapCacheManager。如果未自动配置 ConcurrentMapCacheManager,则定制器将不会以任何方式调用。我们可以有任意数量的定制器,并使用注释 @Order 或 @Ordered 按顺序排列它们。 通用缓存如果 spring-context-support 定义了至少一个 org.springframework.cache.Cache bean,则它使用通用缓存。 CacheManager 捆绑了所有 bean 并对其进行了配置。 JCacheJCache 是由 javax.cache.spi.CahingProvider. 提供的自启动过程。它存在于类路径 JSR 107 上。spring-boot-starter-cache 提供了 JCacheCacheManager。 我们也可以添加任何其他缓存库。 注意:如果缓存库同时提供本机实现和 JSR 支持,则 Spring Boot 优先使用 JSR 支持。EhCache 2.xEHCache 是基于 Java 的、开源的、广泛使用的缓存。为了使用 EhCache,我们应该使用以下依赖项。 有两种配置 EhCache 的方法
EhCache 使用一个名为 ehcache.xml 的文件。 如果应用程序在类路径中找到了该文件,则 spring-boot-starter-cache 提供的 EhCacheCacheManager。我们可以使用以下属性配置 XML 文件 Hazelcast当我们在应用程序中启用缓存时,Spring Boot 会自动将 HazelcastInstance 包装在 CacheManager 中。它将数据在节点之间平均分配。我们可以使用以下属性配置 Hazelcast。 如果未设置该属性,则 Spring Boot 会尝试在类路径中查找 hazelcast.xml (Hazelcast 配置)文件。 InfinispanInfinispan 是一个嵌入式 Java 库。它用作缓存 或 数据网格。它以 键值 形式存储数据。它可以轻松地与 JCache、JPA Quarkus、Spring 等集成。 它没有默认的文件位置,因此我们应该明确指定它。如果未明确指定 Infinispan,它将使用默认的引导程序。 Couchbase当我们实现 couchbase-spring-cache 并且配置了 Couchbase 时,CouchebaseCacheManager 会自动配置。与缓存相关的所有操作都在 Bucket 中执行。它允许我们通过设置属性 spring.cache.cache-name. 创建其他缓存(如果需要)。 定制器允许我们创建其他 Buckets,我们可以在其中创建另一个缓存。 让我们通过一个例子来理解上面的概念。 假设我们需要三个名为 cacheA、cacheB 和 cacheC 的缓存。 cacheA 和 cacheB 在主 Bucket 上(即自动配置的 Bucket)。 cacheC 在另一个 Bucket 上,该 Bucket 将存在几秒钟,例如 4 秒。因此,我们可以通过指定属性来创建 cacheA 和 cacheB,如下所示 Redis当我们配置 Redis 时,RedisCacheManager 会自动配置。它还允许我们使用属性 spring.cache.cache-names 创建其他缓存。可以使用属性 spring.cache.redis.* 实现默认配置。 我们可以通过使用 RedisCacheConfiguration bean 来完全控制默认配置。 上面的属性配置了两个名为 cacheA 和 cacheB 的缓存,它们存在 10 分钟。 CaffeineCaffeine 是一个基于 Java 的缓存库。它还提供了一个内存缓存。如果它在类路径中找到了 Caffeine,则 spring-boot-starter-cache 依赖项会自动配置 CaffeineCacheManger。如果要在应用程序中使用 Caffeine,我们需要添加以下依赖项 Caffeine 缓存允许我们使用属性 spring.cache.caffeine.spec. 定义缓存的 大小 和 生存时间。例如 上面的配置创建了两个名为 cache1 和 cache2 的缓存。缓存的最大大小为 500,缓存的最大生存时间为 6 秒。 简单它是默认实现。如果未指定缓存提供程序。如果 Spring Boot 在类路径中找不到任何缓存提供程序,则它将 ConcurrentHashMap 配置为缓存存储。 例如,如果我们需要两个缓存,则使用以下属性设置它们的名称 无当通过注释 @EnableCaching 启用缓存时,应用程序期望一个合适的配置。当我们想在某个环境中 禁用 缓存时,使用它。我们使用属性 spring.cache.type 来禁用缓存。 |
我们请求您订阅我们的新闻通讯以获取最新更新。