📜  Spring Boot – 缓存提供者

📅  最后修改于: 2022-05-13 01:54:45.592000             🧑  作者: Mango

Spring Boot – 缓存提供者

Spring Boot 是一个构建在 Spring Framework 之上的项目,它提供了一种更简单、更快捷的方式来设置、配置和运行简单的和基于 Web 的应用程序。它是一个基于微服务的框架,用于创建一个独立的基于 Spring 的应用程序,我们可以使用最少的 Spring 配置运行该应用程序。

Spring 框架支持透明地向应用程序添加缓存。它使经常访问的对象、图像和数据更靠近您需要它们的位置,通过不多次访问数据库或任何第三方应用程序来加快访问速度并节省金钱成本。可以缓存不经常更改的数据。

在 Spring Boot 中,缓存提供程序授权程序员在应用程序中显式配置缓存。它结合了各种缓存提供程序,例如EhCache、Redis、Guava、 Caffeine等。

要将缓存添加到应用程序的操作中,我们需要在其方法中添加@Cacheable注释

// Annotation 
@Component

// Class 
public class Student 
{

        // Annotation 
        @Cacheable("Names")

          // Method 
          public int getName(String name) {}
}

现在, 在调用getName()方法之前,抽象会在名称缓存中查找与名称参数匹配的条目。如果找到条目,缓存中的内容会立即返回给调用者,并且不会调用该方法。否则,调用该方法,并在返回值之前更新缓存。

Spring Boot 缓存提供程序

缓存抽象不提供实际的存储,它依赖于org.springframework.cache.Cacheorg.springframework.cache.CacheManager接口实现的抽象。如果我们没有定义CacheManager类型的 bean 或名为cacheResolverCacheResolver ,Spring Boot 会尝试检测以下提供者:

  1. 通用的
  2. JCache (JSR-107)
  3. EhCache 2.x
  4. 榛树
  5. 番石榴
  6. 英菲尼斯潘
  7. 沙发底座
  8. 雷迪斯
  9. 咖啡因
  10. 简单的

为了快速添加基本的缓存依赖,我们必须使用pom.xml 文件中的spring-boot-starter-cache 。如果我们想手动添加依赖项,我们必须在pom.xml文件中包含spring-context-support以使用JCache、EhCache 2.x 或 Guava支持。

  
org.springframework  
spring-context-support  
5.2.3.RELEASE  
  

提供者 1:通用

在定义至少一个org.springframework.cache.Cache bean 的上下文中使用通用缓存。一个 CacheManager 包装了该类型的所有 bean。

提供者 2: JCache

JCache 从 classpath 上存在javax.cache.spi.CachingProvider开始,而JCacheCacheManagerspring-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支持。

提供者 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  

提供者 4: Hazelcast

Hazelcast 实际上是一个流和内存优先的应用程序平台,用于在本地、边缘或作为完全托管的云服务的快速、有状态、数据密集型工作负载。 Spring Boot 对Hazelcast具有一般支持。如果HazelcastInstance已被自动配置,它会自动包装在CacheManager中,除非指定了spring.cache.jcache.config属性。我们可以使用以下属性配置 Hazelcast:

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

提供者 5:番石榴

Guava 是一组来自 Google 的核心Java库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序。 Guava 是一个 JAR,它提供了许多其他功能中的缓存。我们可以通过以下方式配置applicationConfig.xml文件:

提供商 6: Infinispan

Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的存储、管理和处理数据的功能。它可以很容易地与 JCache、JPA Quarkus、Spring 等集成。它提供了一个键/值数据存储,可以保存所有类型的数据,从Java对象到纯文本。 Infinispan 没有默认配置文件位置,因此必须明确指定。否则,将使用默认引导程序。

spring.cache.infinispan.config=infinispan.xml

提供者 7:沙发底座

如果Couchbasecouchbase-spring-cache实现可用且已配置,则CouchbaseCacheManager会自动配置。我们可以通过设置spring.cache.cache-names属性在启动时创建额外的缓存。这些缓存在自动配置的Bucket上运行。我们还可以使用定制器在另一个Bucket上创建额外的缓存。我们可以通过配置在一个 Bucket 中创建两个缓存,如下:

spring.cache.cache-names=cache1,cache2

提供者 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

提供者 9:咖啡因

如果存在并配置了 Caffeine,则CaffeineCacheManager (由 spring-boot-starter-cache “Starter”提供)会自动配置。咖啡因取代了对番石榴的支持。可以通过设置spring.cache.cache-names属性在启动时创建缓存。

以下配置创建最大大小为 100 且生存时间为 1 分钟的 cache1 和 cache2 缓存:

spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=60s

提供者 10:简单

如果没有提及其他提供者,则配置使用ConcurrentHashMap作为缓存存储的简单实现。仅当应用程序中不存在缓存库时才会使用它。我们可以通过设置cache-names属性来限制可用缓存的列表。如果我们只需要 cache1 和 cache2 缓存,请按如下方式设置cache-names属性:

spring.cache.cache-names=cache1,cache2