

Cache的自动配置类:

缓存的原理及运行流程:
将方法的运行结果进行缓存,以后再要相同的数据直接从缓存中获取,不用调用方法
* CacheManager管理多个缓存组件的,对缓存的真正CRUD操作在cache组件中,每个组件都有自己唯一一个名字
* 几个属性:
* cacheNames/value:指定缓存的名字
* key:缓存数据时使用的key,可以用它来指定,默认使用方法参数的值 例如:1-方法的返回值
* 编写SpEl:#id 参数ID的值 #a0 #p0 #root.args[0]
* keyGenerator:key的生成器,可以自己制定key的生成器组件id
* key/keyGenerator二选一
* CacheManager:指定缓存管理器;或者cacheResolver指定缓存解析器 二者选其一
* condition:指定符合条件的情况下才缓存
* unless:否定缓存,unless指定的条件为true,方法的返回值就不会被缓存;可以获取到结果进行判断 ,unless="#result==null"
* sync:是否使用异步模式
* 原理:
* 1.自动配置类;CacheAutoConfiguration
* 2.缓存的配置类:org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
* 3.哪个配置类默认生效:SimpleCacheConfiguration
* 4.给容器中注册了一个CacheManager:ConcurrentMapCacheManager
* 5.可以获取和创建ConcurrentMapCache类型的缓存组件,他的作用是将数据保存在ConcurrentMap中
*
* 运行的流程:
* @Cacheable
* 1.方法运行之前,先去查询Cache(缓存组件)。按照cacheNames指定的名字获取:
* CacheManager先获取相应的内存,第一次获取缓存如果没有cache组件会自动创建
* 2.去cache中查找获取缓存的内容,使用一个key(默认就是方法的参数),
* key是按照某种策略生成的,默认是使用keyGenerator生成,默认使用SimpleKeyGenerator生成
* SimpleKeyGenerator生成策略:
* 如果没有参数:key=new SimpleKey();
* 如果有一个参数:key=参数的值
* 如果有多个参数:key=new SimpleKey(params)
* 3.没有查到缓存就调用目标方法
* 4将目标方法返回的结果放进缓存中
*
* @Cacheable标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存,
* 如果没有就运行方法并将结果放入到缓存中,以后再来调用就可以直接使用缓存中的数据
*
* 核心:
* 1.使用CacheManager(ConcurrentMapCacheManager),按照名字得到Cache(ConcurrentMapCache)组件
* 2.key使用keyGenerator生成,默认是SimpleKeyGenerator
注:如果使用异步sync属性,unless属性是不支持的
/* @CachePut:既调用方法又更新缓存数据:同步更新缓存 修改了数据库的数据同时要更新一下缓存 运行时机: 1.先调用目标方法 2.将目标结果的方法缓存起来 测试步骤: 1.查询一号员工,查出结果放在缓存中 key:1 value:张三 2.以后查询还是之前的结果 3.更新一号员工 将方法的返回值也放进缓存 key:employee value:返回的 employee对象 4.查询一号员工?应该是更新后的员工 key = "#employee.id":使用传入的参数的员工的Id key="#result.id" :使用返回后的id @Cacheable的key的key是不能用#result.id的 为什么是没更新前的数据:【1号员工没有在缓存中更新】 */ @CachePut(value = "emp",key = "#employee.id") public Employee updateEmp(Employee employee){ System.out.println("updateEmp"+employee); employeeMapper.updateEmp(employee); return employee; }
@CacheConfig()是抽取缓存的公共配置
本文深入探讨Spring Cache的工作原理,包括Cacheable、CachePut和CacheEvict注解的使用,以及CacheManager和ConcurrentMapCacheManager的角色。通过实例演示如何在实际应用中配置和利用缓存提高效率。
1566

被折叠的 条评论
为什么被折叠?



