背景: 由于开发过程中总会涉及到一些业务需要实现数据信息的高效响应,而且对内存的要求又不是很大的前提下缓存是比较好的选择。
1. SpringBoot为我们提供了一些高速开发的缓存其中@Cache就是比较官方化的,而且是符合JSP107规范。
关于具体的缓存介绍请看上篇博客
JSR107缓存规范(Java 规范提案)_gcglhd的博客-CSDN博客
2. 开发使用的步骤:
首先: SpringBoot的入门@Cache需要进行的配置和搭建请看博客:
SpringBoot2.0以上版本之缓存入门使用_gcglhd的博客-CSDN博客
然后: 最核心的SpringBoot的@CachePut是本次博客的核心。
3. @CachePut的说明,执行顺序,是先调用目标方法,然后再将数据存放在缓存中。(原理:就是把缓存重新更新,然后当再次获取缓存的内容时候,就会自动的进行新的缓存获取,所以也不需要进入函数内进行内容的获取)
/**
* @CachePut:即调用方法,有更新缓存的数据 修改数据库的数据同时跟新缓存。
*/
/**
* 1.运行时机先调用目标方法。
* 2.将目标方法的结果缓存起来。
* 3.在通过缓存获取数据的时候自动就是更新后的数据。
*/
@Cacheable(cacheNames = {"emp"}) //当参数id的值大于0的时候才开启缓存。默认情况下缓存中存放的key为函数的参数。
public Employee getEmp(Integer id) {
System.out.println("要查询的用户Id为:" + id);
Employee empById = employeeMapper.getEmpById(id);
return empById;
}
/**
* @CachePut:即调用方法,有更新缓存的数据 修改数据库的数据同时跟新缓存。
*/
@CachePut(value = "emp",key = "#result.id")
public Employee updateEmp(Employee employee) {
System.out.println("进入更新数据库的操作!!"+employee);
employeeMapper.updateEmp(employee);
return employee;
}
//</editor-fold>
注意核心事项:
Cache的存放有一定的规则那就是key值的选择,默认情况下是根据函数参数,比如上面第一个函数参数为Id的缓存,第二个函数的参数为employee,如果没有定义key,那么就会造成这个缓存信息会不相符,导致查询的缓存数据是失败的,没有更新。所以在上面我们进行定义了@CachePut的key值为返回结果的Id属性,刚好和上面一致,所以整个缓存可以正常的更新使用。