背景:
当我们使用缓存机制后,会存在缓存清理的需求,如果不进行清理,将会造成缓存被大量使用,导致程序奔溃异常。
/**
* @CacheEvict缓存清除
* allEntries = true表示清除emp下的所有缓存。
* beforeInvocation 表示缓存数据是否在方法执行之前执行,默认为false代表在方法执行之后执行。
*/
1. @CacheEvict的清除缓存使用之allEntries。
当allEntries没有进行设置,将默认清除的内容是函数的参数保持一致。也就是清除的是key为Id的缓存数据。
如果allEntries进行了设置,并且为true时候,就是表示,当调用该函数的时候就会清除emp缓存单元中所有的缓存数据。
/**
* @CacheEvict缓存清除
*/
@CacheEvict(value = "emp" ,allEntries = true) //默认就是函数的参数Id和上面的保持一致
public void deleteEmp(Integer Id){
System.out.println("进入缓存清除的Employee的Id:"+Id);
// employeeMapper.deleteEmp(Id); 看业务需要是否要删除数据库数据还是只需要删除
}
2. @CacheEvict的清除缓存使用之beforeInvocation。
当不设置beforeInvocation的时候,默认为false,表示在方法执行之后进行删除缓存,当设置为true时候,则表示缓存在方法执行之前进行删除。(一般不进行设置,因为在方法执行之后进行删除缓存是有需求的,比如当函数执行异常例如有除数为0的时候,则表示不可以进行缓存的删除)
@CacheEvict(value = "emp" ,beforeInvocation = true) //默认就是函数的参数Id和上面的保持一致
public void deleteEmp(Integer Id){
System.out.println("进入缓存清除的Employee的Id:"+Id);
int a=10/0;
// employeeMapper.deleteEmp(Id); 看业务需要是否要删除数据库数据还是只需要删除.
}