SpringBoot 缓存管理器CacheManager
从3.1开始Spring定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager
接口来统一不同的缓存技术;并支持使用JCache(JSR-107)
注解简化开发.
- Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
- Cache接口下Spring提供了各种xxxCache的实现;如
RedisCache
,EhCacheCache
,ConcurrentMapCache
等;
快速开始
1、导入Maven
<dependency> |
因为需要用RedisCacheManager
所以导入Redis依赖
2、配置Redis并开启缓存支持
import com.fasterxml.jackson.annotation.JsonAutoDetect; |
3、注解解析
注解的几个属性说明:
//指定缓存组件的名字 |
@Cacheable
先查询缓存中是否存在,存在则返回缓存内容,反正执行方法后返回并把返回结果缓存起来@CacheEvict
删除指定缓存@CachePut
更新并刷新缓存,先执行方法内容,然后更新缓存@EnableCaching
这个是一个复合注解,可以拥有同时配置上面3个注解的功能
4、使用方法
"act") //这个注解表示类中共同放入到act 模块中 (cacheNames = |
缓存工作原理
当我们引入缓存的时候,SpringBoot的缓存自动配置CacheAutoConfiguration
就会生效
在
CacheAutoConfiguration
中的CacheConfigurationImportSelector
会导入很多缓存组件配置类通过debug看源码,知道imports 的内容如下
static class CacheConfigurationImportSelector implements ImportSelector {
CacheConfigurationImportSelector() {
}
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
CacheType[] types = CacheType.values();
String[] imports = new String[types.length];
for(int i = 0; i < types.length; ++i) {
imports[i] = CacheConfigurations.getConfigurationClass(types[i]);
}
return imports;
}
}
/**
imports 如下
0 = "org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration"
1 = "org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration"
2 = "org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration"
3 = "org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration"
4 = "org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration"
5 = "org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration"
6 = "org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration"
7 = "org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration"
8 = "org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration"
9 = "org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration"
*/如果没有引
Redis
, 则SimpleCacheConfiguration
这个就是默认的配置类在
SimpleCacheConfiguration
注入了一个ConcurrentMapCacheManager
ConcurrentMapCacheManager
实现了CacheManager
接口ConcurrentMapCacheManager
通过ConcurrentHashMap
把数据缓存起来在
CacheManager
有一个Cache getCache(String var1)
方法换取缓存流程大概就这里,感兴趣的同学可以打断点阅读源码