Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache( JSR-107)注解简化开发;
- Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
-
使用Spring缓存抽象时需要关注以下两点,如下图
1.确定方法需要被缓存以及他们的缓存策略
-
- 常用的缓存注解及参数
- 常用的缓存注解
-
- 主要参数
Spring 缓存抽象有缓存自动的配置类: CacheAutoConfiguration
下面SpringBoot的版本为 2.0.6.RELEASE
这里有个@Import的注解,用于导入ImportSelector的实现类,如下图
selectImports方法用于返回导入类的名称;
列出所有的CacheConfiguration
yml 配置中添加如下,打印匹配的自动配置类
debug: true
默认情况下只有SimpleCacheConfiguration匹配
SimpleCacheConfiguration matched: - Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition) - @ConditionalOnMissingBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
SimpleCacheConfigurationg给Spring容器注册一个ConcurrentMapCacheManager的Bean
ConcurrentMapCacheManager的getCache方法
private final ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<>(16);
该方法用于获取和创建ConcurrentMapCache类型的缓存
缓存运行流程:
1.先进getCache方法进行缓存查询,按照cacheNames指定的名字获取
CacheManager先获取对应的缓存,没有则创建一个对应的缓存
2.之后进入lookup方法,使用一个key查找缓存的内容,默认key为方法的参数
先进入lookup方法查询缓存
private final KeyGenerator keyGenerator;