多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**1. 工作原理** (1)由自动配置类 CacheAutoConfiguration 按照顺序导入下面的缓存配置类。 ```java 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.GuavaCacheConfiguration org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration【默认】 org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration ``` (2)当没有指定任何缓存配置类时,默认使用的是 SimpleCacheConfiguration 配置类。 (3)该配置类给容器中注册一个 CacheManager,默认为 ConcurrentMapCacheManager。 (4)该缓存管理器获取并创建 ConcurrentMapCache 类型的缓存组件,该组件将数据保存在ConcurrentMap 缓存中。 <br/> **2. 工作流程** 以 @Cacheable 为例。 (1)方法运行之前,先去查询 Cache(缓存组件),按照 cacheNames 指定的名字获取。(CacheManager先获取相应的缓存),第一次获取缓存如果没有 Cache 组件会自动创建。 (2)去 Cache 中查找缓存的内容,使用一个 key,默认就是方法的参数。key是按照某种策略生成的,默认由 SimpleKeyGenerator 生成 key。 ```java SimpleKeyGenerator生成key的默认策略: 如果没有参数;key=new SimpleKey(); 如果有一个参数:key=参数的值; 如果有多个参数:key=new SimpleKey(params); ``` (3)没有查到缓存就调用目标方法。 (4)将目标方法返回的结果,放进缓存中。