首页 > 其他分享 >Spring Boot教程之十八:Cache Provider

Spring Boot教程之十八:Cache Provider

时间:2024-12-05 17:01:57浏览次数:11  
标签:cache Spring Cache Boot Provider 缓存 spring

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.Cacheorg.springframework.cache.CacheManager接口实现的抽象。如果我们没有定义CacheManager类型的 bean或名为cacheResolver的CacheResolver ,Spring Boot 将尝试检测以下提供程序:

  1. Generic
  2. JCache (JSR-107)
  3. EhCache 2.x
  4. Hazelcast
  5. Guava
  6. Infinispan
  7. Couchbase
  8. Redis
  9. Caffeine
  10. 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的文件,则使用 E​​hCache 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

如果Couchbasecouchbase-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

相关文章

  • Spring Boot教程之十九:日志记录
    SpringBoot–日志记录SpringBoot中的日志记录在SpringBoot应用程序中起着至关重要的作用,用于记录应用程序内的信息、操作和事件。它还用于监视应用程序的性能、了解应用程序的行为以及识别应用程序内的问题。SpringBoot通过提供各种日志记录框架来提供灵活的日志记......
  • IntelliJ+SpringBoot项目实战(27)--实现国际化项目开发
        因为有时候承接一些国外项目,项目需要支持国际化。国际化包括页面静态文字的国际化,接口中返回的信息的国际化,JS脚本里内容的国际化。一、配置国际化语言    在openjweb-core工程中增加默认国际化语言配置类:packageorg.openjweb.core.config;importja......
  • springboot毕设 青少年视力筛查系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代科技的飞速发展,青少年群体对于电子产品的依赖程度日益加深,长时间面对屏幕不仅改变了他们的生活方式,也对视力健康构成了严峻挑战。近年来,我国......
  • springboot毕设 汽车管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代科技的飞速发展,汽车行业正经历着前所未有的变革。智能化、信息化已成为汽车产业发展的新趋势。在这一背景下,汽车管理系统的研发显得尤为重要......
  • SpringSecurity - [01] 概述
    SpringSecurity是一个灵活且强大的工具,可以帮助你构建安全可靠的Spring应用程序。它不仅简化了认证和授权的过程,而且还提供了丰富的特性和扩展点,使得开发者可以根据项目的独特需求定制安全策略。无论是小型的内部工具还是大型的企业级应用,SpringSecurity都能提供必要的安全保......
  • Spring Cloud 2024 正式发布,王炸级更新!!
    大家好,我是R哥。2024年都接近尾声了,SpringCloud2024正式版才刚刚发布,真是姗姗来迟啊。SpringCloud2024从里程碑版本到正式版本,一共发布了4次版本:2024.0.02024.0.0-RC12024.0.0-M22024.0.0-M1来看看最新的版本情况:SpringCloud2024,代号:Moorgate,关于版本的命名......
  • Springboot基于JavaWeb的模玩网站系统odk84(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,新闻分类,新闻信息,作者,论坛分类,论坛专区开题报告内容一、研究背景随着动漫、游戏文化的兴起,模玩(模型玩具)已成为众多爱好者的热衷之物。然而,市场上的模......
  • Springboot基于JavaEE技术的大学生兼职平台的设计实现2el65(程序+源码+数据库+调试部署
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,企业,企业信息,招聘信息,学生应聘,兼职评价,在线沟通,行业,勤工俭学开题报告内容一、研究背景与意义随着高等教育的普及和社会经济的发展,大学生兼职已成为......
  • 【Spring 全家桶】 Spring IOC & DI 保姆式教学, 教你不用new也能获取到对象的依赖注入
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • ​‌Spring Boot中的@GetMapping注解可以用于处理HTTP GET请求,并且可以接收对象参数​
    下面内容来自Ai回答,经过亲自验证,正确 ‌SpringBoot中的@GetMapping注解可以用于处理HTTPGET请求,并且可以接收对象参数。‌接收对象参数的基本方式在SpringBoot中,可以通过@GetMapping注解接收对象参数,这通常通过@RequestParam或@RequestBody注解来实现。‌使用@Reque......