您的位置:首页 > 编程语言 > Java开发

SpringBoot之缓存@CacheEvict

2020-07-20 09:29 337 查看

背景:

当我们使用缓存机制后,会存在缓存清理的需求,如果不进行清理,将会造成缓存被大量使用,导致程序奔溃异常。

[code]    /**
* @CacheEvict缓存清除
* allEntries = true表示清除emp下的所有缓存。
* beforeInvocation 表示缓存数据是否在方法执行之前执行,默认为false代表在方法执行之后执行。
*/

1. @CacheEvict的清除缓存使用之allEntries。

当allEntries没有进行设置,将默认清除的内容是函数的参数保持一致。也就是清除的是key为Id的缓存数据。

如果allEntries进行了设置,并且为true时候,就是表示,当调用该函数的时候就会清除emp缓存单元中所有的缓存数据。

[code]    /**
* @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的时候,则表示不可以进行缓存的删除)

[code]    @CacheEvict(value = "emp" ,beforeInvocation = true)    //默认就是函数的参数Id和上面的保持一致
public void deleteEmp(Integer Id){
System.out.println("进入缓存清除的Employee的Id:"+Id);
int a=10/0;
//    employeeMapper.deleteEmp(Id);   看业务需要是否要删除数据库数据还是只需要删除.
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: