开发者学堂课程【SpringBoot 快速掌握 - 高级应用:@ Cacheable 初体验】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/613/detail/9289
@Cacheable 初体验
快速体验缓存
步骤:
⑴开启基于注解的缓存
@EnableCaching
⑵标注缓存注解即可
@Cacheable
@ CacheEvict
@CachePut
package com. atguigu. cache. service;
import com. atguigu. cache. bean. Employee;
import com. atguigu. cache. mapper. EmployeeMapper ;
import org. springframework . beans. factory. annotation .
Autowired;
import org. springframework . stereotype . Service;
@Servic
public class EmployeeService {
@Autowired
EmployeeMapper employee Mapper;
将方法的运行结果进行缓存;以后再要相同的数据,直接从缓存中获取,不用调用方法;也就是不用调用数据库来查询了。
Cache Manoger 管理多个 Cache 组件的,对缓存的真正 CRUD 操作在 Cache 组件中,每一个缓存组件有自己唯一一个名字几个属性:
cacheNames /value:指定缓存组件的名字;
key:缓存数据用的 key;可以用它来指定。
默认是使用方法参数的值 1~方法的返回值
编写 SpEl;#id;参数 id 的值#a0#p9#root. args[θ] keyGenerator ;key 的生成器;可以自己指定 key 的生成器的组件 id
key/key Generator;二选一使用
cacheManager ;指定缓存管理器:或者 cacheResolver 指定获取解析器,也是二选一使用。
condition:指定符合条件的情况下才缓存
unless:否定缓存;当 unless 指定的条件为 true,方法的返回值就不会被缓存;可以获取到结果进行判断
unless="#result==null"sync
是否使用异步模式
两次查询2号员工结果是不一样的,第一次是会打印查询2号员工,第二次不会被打印,如果输入查询1号员工由于从来没有被缓存过就会出现打印。
@paramid
Creturn
@Cacheable
public Employee getEmp(Integer id){
System. out. print\n("查询"+id+"号员工");
Employee emp= emp1oyeeMapper . getEmpById (id);
return emp;
}
}
这个查询目前是没有缓存,启动之后,每次发送请求都会发送数据库。每次查询都是直击数据库的。
第一次和第二次查询都是打印出来查询2号员工。