内外网映射 html缓存问题_SpringBoot中文参考指南(2.1.6)33、缓存

上一篇[32.8、Couchbase/32.9、LDAP]

下一篇[33.1.7、Redis]

256e9018c0aa25505c63de46f1c88a80.png
英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html
GitHub:https://github.com/jijicai/Spring/tree/master/spring-boot

33、缓存

Spring Framework 支持透明地向应用程序添加缓存。抽象的核心是将缓存应用于方法,从而根据缓存中可用的信息减少执行次数。缓存逻辑的应用是透明的,不会对调用程序造成任何干扰。只要通过 @EnableCaching 注解启用了缓存支持,Spring Boot 就会自动配置缓存基础结构。

注释:有关更多详细信息,请查看 Spring Framework 参考的相关部分。(https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#cache )

简而言之,向服务的操作添加缓存与向其方法添加相关注解一样简单,如下面示例所示:

ec953ed092cf6b2bd573a8096f49ced0.png
import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Component;@Componentpublic class MathService {    @Cacheable("piDecimals")    public int computePiDecimal(int i) {        // ...    }}

此示例演示如何在可能代价高昂的操作上使用缓存。在调用 computePiDecimal 之前,抽象在 piDecimals 缓存中查找与 i 参数匹配的条目。如果找到一个条目,缓存中的内容会立即返回给调用方,并且不会调用该方法。否则,将调用该方法,并在返回值之前更新缓存。

当心:你还可以透明地使用标准 JSR-107(JCache)注解(例如 @CacheResult )。但是,我们强烈建议你不要混合和匹配 Spring Cache 和 JCache 注解。

如果不添加任何特定的缓存库,Spring Boot 会自动配置一个在内存中使用并发映射的简单提供器。当需要缓存时(如上例中的 piDecimals),此提供器将为你创建缓存。简单的提供器并不是真正推荐用于生产,但它对于入门和确保你了解这些特性非常有用。当你决定使用缓存提供器时,请确保阅读其文档以了解如何配置应用程序使用的缓存。几乎所有提供器都要求你显式配置在应用程序中使用的每个缓存。有些提供了一种自定义由 spring.cache.cache-names 属性定义的默认缓存的方法。

提示:也可以透明地从缓存中更新或移除数据。

33.1、支持的缓存提供器

缓存抽象不提供实际的存储,依赖于 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口实现的抽象。

如果尚未定义 CacheManager 类型的 bean 或名为 cacheResolver 的 CacheResolver(请参阅 CachingConfigurer),则 Spring Boot 将尝试检测以下提供器(按指示的顺序):

(1)Generic(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-generic )

(2)JCache(JSR-107)(EhCache 3、Hazelcast、Infinispan 和其它)(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-jcache )

(3)EhCache 2.x(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-ehcache2 )

(4)Hazelcast(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-hazelcast )

(5)Infinispan(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-infinispan )

(6)Couchbase(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-couchbase )

(7)Redis(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-redis )

(8)Caffeine(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-caffeine )

(9)Simple(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider-simple )

提示:也可以通过设置 spring.cache.type 属性强制特定的缓存提供器。如果需要在某些环境(如测试)中完全禁用缓存,请使用此属性。

提示:使用 spring-boot-starter-cache “Starter”快速添加基本缓存依赖项。该 starter 提供了spring-context-support。如果手动添加依赖项,则必须包含 spring-context-support 才能使用 JCache、EhCache 2.x 或 Guava 支持。

如果 CacheManager 是由 Spring Boot 自动配置的,则可以通过公开实现 CacheManagerCustomizer 接口的 bean,在完全初始化之前进一步优化其配置。下面的示例设置一个标志,表示 null 值应该向下传递到底层映射:

58dea1f8d995926420e35c9ae377bd16.png
@Beanpublic CacheManagerCustomizer cacheManagerCustomizer() {    return new CacheManagerCustomizer() {        @Override        public void customize(ConcurrentMapCacheManager cacheManager) {            cacheManager.setAllowNullValues(false);        }    };}

注释:在前面的示例中,需要一个自动配置的 ConcurrentMapCacheManager。如果不是这样(你提供了自己的配置或自动配置了其他缓存提供器),则根本不会调用自定义程序。你可以拥有任意数量的自定义程序,还可以使用 @Order 或 Ordered 对它们进行排序。

33.1.1、Generic

如果上下文定义了至少一个 org.springframework.cache.Cache bean,则使用 Generic 缓存。将创建包装该类型所有 bean 的 CacheManager。

33.1.2、JCache(JSR-107)

JCache 是通过类路径上的 javax.cache.spi.CachingProvider 来引导的(也就是说,类路径上存在一个兼容 JSR-107 的缓存库),JCacheCacheManager 是由 spring-boot-starter-cache “Starter”提供的。有各种兼容的库可用,Spring Boot 为 Ehcache 3、Hazelcast 和 Infinispan 提供了依赖管理。也可以添加任何其他兼容的库。

可能会出现多个提供器,在这种情况下,必须显式指定提供器。即使 JSR-107 标准没有强制使用标准化的方式来定义配置文件的位置,Spring Boot 也尽其所能地适应设置带有实现细节的缓存,如下面示例所示:

52447300533a394c6de83fb09f953aa1.png
# Only necessary if more than one provider is presentspring.cache.jcache.provider=com.acme.MyCachingProviderspring.cache.jcache.config=classpath:acme.xml

注释:当缓存库同时提供本地实现和 JSR-107 支持时,Spring Boot 更喜欢 JSR-107 支持,因此如果切换到不同的 JSR-107 实现,也可以使用相同的特性。

提示:Spring Boot 一般支持 Hazelcast。如果只有一个 HazelcastInstance 可用,那么它也会自动为 CacheManager 重用,除非指定了 spring.cache.jcache.config 属性。

有两种方法可以自定义底层 javax.cache.cacheManager:

(1)通过设置 spring.cache.cache-names 属性,可以在启动时创建缓存。如果定义了自定义 javax.cache.configuration.Configuration bean,则使用它来自定义缓存。

(2)使用 CacheManager 的引用调用 org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer bean 以进行完全定制。

提示:如果定义了一个标准的 javax.cache.CacheManager bean,它将自动包装在抽象所期望的 org.springframework.cache.CacheManager 实现中。不会对其应用进一步的自定义。

上一篇[32.8、Couchbase/32.9、LDAP]

下一篇[33.1.7、Redis]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值