Spring boot 参考手册——第31章缓存阅读笔记和注意点
基于Spring boot 1.5.19.RELEASE版本
码字不易,转载请注明出处
一、阅读笔记
1. Spring boot 只是在Spring框架提供的缓存抽象能力之上为我们做了一些自动配置的工作,
本质上Spring框架也并不提供缓存存储能力,只是提供了核心的抽像层接口Cache和CacheManager,方便集成第三方缓存提供商。
Spring Boot auto-configures the cache infrastructure as long as the caching support is enabled via the @EnableCaching annotation.
2. 如果在Spring boot应用中没有定义一个类型为CacheManager的Bean或类型为CacheResolver名称为cacheResolver的Bean,那么Spring boot按以下顺序检测缓存提供商:
- Generic
- JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, etc)
- EhCache 2.x
- Hazelcast
- Infinispan
- Couchbase
- Redis
- Caffeine
- Guava (deprecated)
- Simple
3. 如果需要在特定环境中完全禁用缓存,则使用此属性
spring.cache.type=none
,这个属性的值可以指定为:
public enum CacheType {
/**
* Generic caching using 'Cache' beans from the context.
*/
GENERIC,
/**
* JCache (JSR-107) backed caching.
*/
JCACHE,
/**
* EhCache backed caching.
*/
EHCACHE,
/**
* Hazelcast backed caching.
*/
HAZELCAST,
/**
* Infinispan backed caching.
*/
INFINISPAN,
/**
* Couchbase backed caching.
*/
COUCHBASE,
/**
* Redis backed caching.
*/
REDIS,
/**
* Caffeine backed caching.
*/
CAFFEINE,
/**
* Guava backed caching.
*/
@Deprecated
GUAVA,
/**
* Simple in-memory caching.
*/
SIMPLE,
/**
* No caching.
*/
NONE;
}
4.如果你是手动管理依赖,那么在使用JCache, EhCache 2.x or Guava 缓存时,必须要引入spring-context-support依赖。如果你使用了spring-boot-starter-cache POM,则spring-context-support依赖会自动引入。
5.Spring boot提供了对
自动配置的CacheManager进行调整配置的扩展回调接口:CacheManagerCustomizer
public interface CacheManagerCustomizer<T extends CacheManager> {
/**
* Customize the cache manager.
* @param cacheManager the {@code CacheManager} to customize
*/
void customize(T cacheManager);
}
.什么时候应用调整:在CacheManager的Bean完全初始化之前调整
.如何调整:通过实现CacheManagerCustomizer 接口,并将其暴露为一个bean。
If the CacheManager is auto-configured by Spring Boot, you can further tune its configuration before it is fully initialized by exposing a bean implementing the CacheManagerCustomizer interface.
6.在使用RedisCacheManager时,Redis会有重叠键(两个独立的缓存空间,但是key名称一样)的可能,会返回无效的值。因此务必要开启key前缀的配置项
By default, a key prefix is added to prevent that if
two separate caches use the same key, Redis would have overlapping keys and be likely to return invalid values. We strongly recommend to keep this setting enabled if you create your own RedisCacheManager.
7.Spring boot自动配置RedisCacheManager的配置类为RedisCacheConfiguration:
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnBean(RedisTemplate.class)
@ConditionalOnMissingBean(CacheManager.class)
@Conditional(CacheCondition.class)
class RedisCacheConfiguration {
private final CacheProperties cacheProperties;
private final CacheManagerCustomizers customizerInvoker;
RedisCacheConfiguration(CacheProperties cacheProperties,
CacheManagerCustomizers customizerInvoker) {
this.cacheProperties = cacheProperties;
this.customizerInvoker = customizerInvoker;
}
@Bean
public RedisCacheManager cacheManager(RedisTemplate<Object, Object> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setUsePrefix(true);
List<String> cacheNames = this.cacheProperties.getCacheNames();
if (!cacheNames.isEmpty()) {
cacheManager.setCacheNames(cacheNames);
}
//回调CacheManagerCustomizers 接口
return this.customizerInvoker.customize(cacheManager);
}
二、注意点
5.1.一定是Spring boot自动配置的CacheManager,上述CacheManagerCustomizer接口实现才会被回调
If that is not the case (either you provided your own config or a different cache provider was auto-configured), [color=red]the customizer won’t be invoked at all[/color].
5.2 可以添加多个CacheManagerCustomizer 回调,并用@Order注解实现顺序调用
You can have as many customizers as you want and you can also order them as usual using @Order or Ordered.
分享到:
相关推荐
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化基于 Spring Framework 的应用程序的初始设置和开发过程。它的核心理念是“约定优于配置”,这意味着 Spring Boot 在默认情况下已经预设了很多常用的配置,...
以上就是Spring Boot的一些核心概念和技术点,通过这些特性,Spring Boot降低了Spring应用的开发难度,提升了开发效率,是现代Java企业级应用开发的首选框架。希望这份学习笔记能帮助你深入理解和掌握Spring Boot的...
Spring Boot 是一个基于 Java 的框架,它简化了创建和配置基于 Spring 的应用程序。在这个主题下,我们将探讨 Spring Boot 如何处理静态资源、Thymeleaf 模板引擎的使用,以及如何自定义视图解析器。 1. **处理静态...
文档《Spring Boot 学习笔记完整教程.pdf》涵盖了多个知识点,详细介绍了Spring Boot的基本使用方法以及一些高级功能的实现。以下是根据文档内容整理的知识点: 1. Spring Boot入门: Spring Boot让开发者能够通过...
《尚硅谷Spring Boot课堂笔记》是一份详尽的Spring Boot学习资源,旨在帮助开发者深入理解和掌握这一现代Java应用开发框架。这份笔记源自尚硅谷教育机构的视频课程,视频链接为,涵盖了Spring Boot的基础知识到高级...
以上仅是Spring Boot众多特性和功能的一部分,实际的笔记可能还会涵盖更多细节,如AOP(面向切面编程)、WebSocket支持、缓存管理、邮件服务、任务调度等。这些知识对于理解和实践Spring Boot开发至关重要。通过深入...
Spring Boot 是一个基于 Spring 框架的快速开发工具,它简化了初始化、配置和运行新项目的流程。这个学习笔记的完整教程将涵盖多个关键领域,帮助开发者深入理解和使用 Spring Boot。 1. **Spring Boot 教程** - *...
Spring Boot 是一个基于Java的框架,它简化了创建独立、生产级别的基于Spring的应用程序的流程。这个学习笔记的完整教程涵盖了从基础到进阶的多个主题,旨在帮助初学者快速上手并深入理解Spring Boot的核心特性。 1...
3. **起步依赖(Starters)**:Spring Boot的核心之一就是其丰富的起步依赖,它们是一组预先配置好的Maven或Gradle依赖,允许开发者通过简单地添加依赖来快速构建功能模块,如数据访问、Web服务、缓存等。...
SSH是Java开发中广泛使用的三大框架——Struts2、Hibernate和Spring的缩写。这三大框架结合使用,能够构建高效、灵活的企业级Web应用程序。现在,让我们深入探讨这些框架的知识点。 **Struts2笔记** Struts2是MVC...
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序...每个子目录可能对应一个特定的主题,如“Web 开发”、“数据访问”等,通过阅读代码和文档,你可以逐步掌握 Spring Boot 的核心概念和用法。
Spring Boot是Java开发中的一个热门框架,由Pivotal团队维护,旨在简化Spring应用的初始搭建以及开发过程。它预设了默认配置,使得开发者能够快速地创建一个独立运行的、生产级别的Java应用。尚硅谷的Spring Boot...
Spring全家桶是企业级应用开发中广受欢迎的解决方案,它包括了一系列的模块和工具,可以覆盖从表现层到业务层再到持久层的整个开发周期。Spring框架的核心特性包括轻量级、控制反转(IoC)、面向切面编程(AOP)、...
《狂神Spring+SpringMVC+SpringBootB站课堂笔记》是针对Java开发中的三大核心框架的深度学习资料,涵盖了Spring、SpringMVC和SpringBoot的全面知识。这些框架是现代Java企业级应用开发的基石,广泛应用于各种复杂的...
总的来说,《Spring in Action》中文清晰版是一本全面且深入的Spring教程,不仅讲解了Spring的核心原理和实践技巧,还涵盖了最新的Spring Boot和Spring Cloud技术。配合阅读笔记,读者能够更有效地掌握Spring框架,...
Hystrix是一个延迟和容错库,旨在隔离访问远程系统、服务和第三方库,停止级联失败,并提供后备选项。它提供了熔断、线程隔离、信号量隔离、超时机制、并发数限制、请求缓存、请求合并等容错功能。Hystrix通过仪表板...
它涵盖了自定义Spring Boot启动器、自动化配置、条件配置、AOP切面编程、幂等性处理、限流机制、返回值包装、Redis缓存支持、异常处理机制、基础工具类库、Spring Security安全认证、OAuth2认证授权、Redis集成、...