JavaEE进阶足球平台出租学习----Boot高级(三)缓存注解

既调用方法,足球平台系统出租Q一89076848稳定系统出租~又更新缓存数据,当修改了数据库的某一个数据,同时更新缓存

service层代码如下

@CachePut(value = "emp")
public Employee updateEmp(Employee employee){
    employeeMapper.updateEmp(employee);
    return employee;
}
  • 1
  • 2
  • 3
  • 4
  • 5

Controller层代码如下

@GetMapping("emp")
public Employee update(Employee employee){
    Employee emp = employeeService.updateEmp(employee);
    return emp;
}
  • 1
  • 2
  • 3
  • 4
  • 5

测试说明

  • 先查询id为1的员工信息,第一次请求将查询数据库,然后放入缓存中
  • 在执行更新id为1的员工信息,再查询id为1的员工信息,返回的是更新之前缓存中的员工信息
  • 原因在于 @Cacheable中的key默认是参数,值是返回结果,查询缓存key是1,value是employee对象,更新方法中的@CachePut注解key是传入的employee对象,value是返回的employee对象,
  • 更新之后查询应该返回的是更新的数据,也就是缓存中的数据没有更新,原因在于两次的key不一样导致,修改如下
 @CachePut(value = "emp" ,key = "#employee.id")
public Employee updateEmp(Employee employee){
    employeeMapper.updateEmp(employee);
    return employee;
}
  • 1
  • 2
  • 3
  • 4
  • 5

注解@CacheEvict的使用

注解@CacheEvict清除缓存,通过使用value,key属性清除指定缓存中指定key的缓存数据,有一个allEntries属性,默认是false,意思就是是否删除指定缓存中的所有key的缓存数据。beforeInvocation = false属性表示缓存的清除是否在方法执行之前执行,默认是在方法之后执行,如果出现异常就不会清除缓存,如果在方法之前执行,就是不管方法是否执行成功都会清除缓存数据

猜你喜欢

转载自blog.csdn.net/a68862311/article/details/80339716