springboot缓存运行原理

76 阅读1分钟

一、spring boot缓存原理:

1、自动配置类:CacheAutoConfiguration,类中导入了缓存配置类:

2、当容器中配置了哪个缓存组件进去,那个缓存的配置类就会被注入,默认SimpleCacheConfiguation会被匹配上。

3、SimpleCacheConfiguation向容器中注册了一个CacheManager:ConcurrentMapCacheManager

当redis配置进来后,默认的RedisCacheManager会被注入进来,而默认的ConcurrentMapCacheManager会失效。

4、getCache()方法可以获取和创建ConcurrentMapCache缓存组件 ConcurrentMapCache的作用是将数据保存到ConcurrentMap中,spring boot默认将数据保存到ConcurrentMap中,作为缓存。

二、@Cacheable注解的运行流程:

缓存的可以的生成策略:
key(默认为方法参数)默认使用SimpleKeyGenerator生成的
  SimpleKeyGenerator的生成key的默认策略:
    1>如果没有参数,key=new SimpleKey();
    2>如果有参数,key=参数的值;
    3>如果有多个参数,key=new SimpleKey(params);

流程:

1、目标方法运行之前,先去查询Cache(缓存组件),按照cacheName指定的名字进行获取

(CacheManager先获取对应的缓存),第一次获取缓存时,如果没有Cache组件会自动创建。

2、去Cache查找缓存(ConcurrentMapCache的lookup方法)的内容,使用key查询。

3、如果没有查到缓存,就调用目标方法。

4、将目标方法返回的结果放进缓存中。

总结:@Cacheable标注的方法,在方法执行之前先去检查缓存中是有此数据,默认按照参数的值作为key查询缓存,如果没有就执行方法并将结果放入到缓存里,再调用方法时,就可以使用缓存中的数据