Spring Boot -- 使用Cache缓存注解详解

首先使用IDEA的Spring初始化器,引入cache,mysql,mybatis,web等模块

先在主方法加上以下注解开启cache缓存:

@EnableCaching

缓存加载方法体上的作用如下:

1.@Cacheable(cacheNames = “emp”,condition = “” ,unless = “” ,key = “” ,sync = “” )

这个注解用于运行方法时如果缓存中没有对应的返回值,就执行方法并且加入缓存.如果返回值已经存在于缓存中,则不执行该方法并且直接返回缓存中的值,可用于查询操作
@Cacheable(cacheNames = "emp",condition="a0>0")              //将方法运行结果进行缓存
public Employee selectById(Integer id) {
    System.out.println("Service层查询一个员工id=" + id);
    Employee employee = employeeMapper.selectById(id);
    return employee;
}

这里有几个常用取值:
cacheNames/value:指定存在于哪个缓存空间里,可以同时存进多个缓存空间,上面将查询的结果存入名称为emp的缓存空间里
condition:指定缓存的条件,上面执行结果是当传入的id值大于0时才执行缓存操作,即id小于等于零的返回值都不会被存进
unless:与condition相反,当unless的值为true时不会执行缓存
key:指定生成key的值,默认如果不配的话会将返回值作为key值,如上面生成的key就是id.生成键值对就是id:id
sync:指定是否为异步操作,当指定为true时为异步,这时候要注意unless将会失效!

2.@CachePut(value = “emp”,key = “#result.id”)

这个注解用于同步执行方法与缓存,即每次执行被注解的方法都会运行存入缓存操作,不论存在与否.多用于插入,更新等数据实时更新的操作
@CachePut(value = "emp",key = "#result.id")              //方法执行缓存就更新,多用于缓存更新,默认key是返回的Employee
public Employee update(Employee employee) {
    System.out.println("Service层更新一个员工id=" + employee.getId());
    employeeMapper.update(employee);
    return employee;
}
这里要注意,如果没有配置key的值,让其使用默认的key值将会是employee对象,会发现跟上面执行查询之后存入的key值不一样,务必要使用key更改默认的key值,这里用了SpEL表达式#result.id 这个表达式的意思是取下返回值的id作为key值.另外#result.id的写法不支持上面的注解@Cacheable,因为这个注解会先执行查询缓存操作.

至于注解里的取值跟上面差不多

3.@CacheEvict(value = “emp”, key = “#id”,beforeInvocation=“false”)

这个注解用于移除缓存中的数据,多用于删除
@CacheEvict(value = "emp", key = "#id")
public void delete(Integer id) {
    System.out.println("Service层删除一个员工id=" + id);
    employeeMapper.delete(id);
}
这里要注意,如果不知道key值,默认将会删除传入值为key值的数据

注解里的取值,还多出两个常用的:
allEntries:清除所有该缓存空间下的数据,即当配置了这个属性,key属性将会失效,默认值是false
beforeInvocation:是否在执行方法前删除缓存数据,默认是false,即默认是在执行方法之后执行的

4.@Caching()

这个注解可以定义多个缓存规则
@Caching(
        cacheable = {
                @Cacheable(value = "emp",key = "lastName")
        },
        put = {
                @CachePut(value = "emp",key = "#result.id")
                @CachePut(value = "emp",key = "#result.email")
        }
)
public Employee selectByName(String lastName) {
    return employeeMapper.selectByName(lastName);
}
可见上面介绍的方法都可以同时作用在一个方法上,就要使用该注解

5.@CacheConfig(cacheNames = “emp”)

第四个注解使用的示例会发现我们写了很多个相同的value=“emp”,那么我们可以使用@CacheConfig进行提取,这样下面在配置的时候就不要写上value或者cacheNames这两个属性了,要注意这个注解要写在当前类上作为公共属性.
@CacheConfig(cacheNames = "emp")
@Service
public class EmployeeService {
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值