springboot+cache缓存下(原理篇)

原理

1.自动配置类;CacheAutoConfiguration

在idea中使用快捷键ctrl+shift+n,查找出CacheAutoConfiguration类

看到import中有导入CacheConfigurationImportSelector类,我们通过对这个类进行debug查看过程中我们导入哪些选择器。

可以看到返回如下的配置

2.缓存的配置类

org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration

3.哪个配置生效

在application的配置文件中,添加如下语句

#控制台打印配置信息
debug=true

可以看到哪些配置项生效

分析下SimpleCacheConfiguration

4.给容器中注册了CacheManger:ConcurrentMapCacheManager

5.可以获取和创建ConcurrentMapCache类型的缓存组件,它的作用是将数据保存在ConcurrentMap中;

运行的流程

@Cacheable

  1. 方法运行之前,先去查询cache(缓存组件),按照cacheName指定的名字获取;(cacheManager先获取相应的缓存),第一次获取如果没有Cache组件会自动创建。
  2. 去cache中查找缓存的内容,使用一个key,默认是方法的参数;key是按照某种策略生成的,默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成key;SimpleKeyGenerator生成可以的莫仍策略;如果没有参数;key=new SimpleKey();如果有一个参数:key=参数的值;如果有多个参数:key = new Simplekey(params);
  3. 没有查到缓存就调用目标方法;
  4. 将目标方法返回的结果。放进缓存中;

@Cacheable标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存,如果没有就运行方法并将结果放入缓存。以后再来调用就可以直接使用缓存中的数据。

核心:
1)使用cacheManager【ConcurrentMapCacheManager】按照名字得到【ConcurrentMapCache】组件
2)key使用keyGenerator生成的,默认是simpleKeyGenerator

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章