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 进阶笔记(详细全面) 中文PDF完整版.pdf》是一份非常实用的Spring Boot进阶学习资料,适用于已经掌握基础知识的开发者,希望深入学习Spring Boot框架的高级应用。 本资料主要包含了Spring Boot的高级...
分享我的Spring Boot 笔记文档,本文档从Spring 的演变说起,根据文档一步一步学习,让您全面理解Spring Boot的工作原理,以及使用方法。可当做操作手册使用。 主要讲解内容有: 1、spring 的java配置方式; 2、...
着重介绍SpringBoot的与各大场景的整合使用,内容包括:缓存(整合Redis),消息中间件(整合RabbitMQ),检索(整合ElasticSearch),任务(异步任务,定时任务,邮件任务),安全(整合SpringSecurity),...
Spring Boot项目实践 Java体系知识点汇总: : 网站资源链接 S3基本使用事件 数据库隔离等级验证 常用JVM命令验证 AOP实用技巧;某些打日志等 m3u解析器 知识汇总:::: 其他 GIT地址 UI资源 , 限流算法...
数据库设计(业务第一原则, 无需太注意三大范式) 完成商品列表页 完成商品详情页 完成订单详情页 第4章-秒杀压测-Jmeter压力测试 学习使用jmeter做压力测试, 学习jmeter变量定义, redis压力测试工具 知识点 jemter...
课程采用目前市面上比较热门的技术Vue、Spring Boot、Spring Security开发,符合绝大多数公司开发的主流技术,采用前后端分离完成项目的开发; ????课程分前端和后端两部分;前端采用Vue Element 完成界面布局,从零...
这是尚硅谷的SpringBoot教程,自己过了敲了一遍代码,下面是整理的笔记和课件,用于自己学习,如有侵权请告知 如果你喜欢,给个star哈~ 内容概要 初级 高级 一、Spring Boot入门 九、Spring Boot与缓存 二、Spring ...
Spring boot(后续用*表示) helloworld * 返回 json 数据 * 使用其他 json 转换框架 * 全局异常捕捉 * JPA 连接数据库 * 配置 JPA * 整合 JPA 保存数据 * 使用 JdbcTemplate 保存数据 * 常用配置 * 静态资源处理 * ...
Coherence Spring还提供了一组组件来帮助集成Oracle Coherence和Spring生态系统的其他各个项目: Spring的缓存抽象Spring Cloud Config Server(进程内) Spring会议(TBD) Spring数据(TBD)文献资料参考指南中...
项目涉及短信验证码解决方案,第三方支付接口快钱 完整示例,Redis缓存解决实际问题,会话跟踪JWT技术。适合从单一架构到分布式架构过渡阶段,熟悉Vue,Spring Boot,Dubbo框架, 想要进阶的同学们。以实际项目要求...
一、Spring Boot与缓存 一、JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 • CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个...
MartinHub的学习笔记 关于我 MartinHub :smiling_face_with_sunglasses: ,,热爱生活!...注意:因为构建页面的框架缓存,访问笔记地址时,为防止最新更新的笔记看不到,请浏览器打开网址后,先清除页面缓存。
"springboot信息化在线教学平台的设计与实现.zip"是一个压缩文件,它包含了一个基于Spring Boot框架的信息化在线教学平台的完整项目资源。这个平台旨在提供一个便捷、高效的网络教育环境,以支持教师和学生进行远程...
第一次接触SpringBoot和SpringCloud,为了尽快的完成该项目,很多功能没有进行太多的规划和测试,代码逻辑较乱。只实现了主要功能,本来是想写个学习平台的.但是范围太大,不太好完成.所以就完成了其中的考试功能. ...
前端采用原生小程序(大约5%的vant-ui),后端采用Spring Cloud Alibaba对业务进行了拆分,分为fangyi-user、fangyi-task、fangyi-share三个模块,以nacos作为注册中心,redis作为缓存数据库,同时利用网关鉴权服务...
java ee笔试题 cas单点登录框架: ...eclipse跑程序的时候要注意有可能因为页面缓存导致不显示新页面 maven: struts.xml等文件的路径可以参考发布在tomcat中的项目来进行调整 注意groupId的含义包,比如: org.pos
使用场景和常见问题 Netty IO模型 Linux底层IO原理 全手写急速理解Netty模型及IO模型应用实战 Netty之IO模型开发本质手写部分实现推导篇 全手写基于Netty的RPC框架自定义协议,连接池 全手写基于Netty的RPC框架 协议...
以OpenLayers/Cesium、PostgreSQL/PostGIS、GeoServer等开源WebGIS技术为核心支撑,结合Vue、Spring Boot等前后端开发技术,设计和开发了基于开源WebGIS的移动端智慧养老App与Web端智慧养老管理系统。 1.关于账号...
用于整理日常常用的开发模式,一是作为开发笔记以备我自己日后使用,二是分享出来供大家参考。 重点介绍Redis,MongoDB,ElasticSeach,Cassandra模型数据库,因为它们是各自领域的领先者(分别是KV缓存,文
个人学习笔记 python nginx AWS认证考试 技术路线 LB负载均衡 负载均衡常见使用场景,问题定位,特别是对于概率性出现的访问超时问题定位。包含如下组件 nginx lvs openresty kong apigateway 消息中间件 对于消息...