cacheable 表达式_springboot @Cacheable 基本使用

加入依赖:

org.springframework.boot

spring-boot-starter-cache

开启注解缓存:

在启动类上加入 @EnableCaching

缓存注解

@Cacheable :

对方法结果进行缓存(主要用于GET方法)

cacheNames/value:指定缓存主键(Cache)的名字

key:缓存数据使用key,支持spEl语法

keyGenerator:key的生成器。与key属性冲突,自定义 keyGenerator 必须实现

org.springframework.cache.interceptor.KeyGenerator,default使用默认的参数值生成器

cacheManager:指定缓存管理器,或者cacheResolver指定获取解析器cacheResolver:与

CacheManager冲突condition:指定条件满足才缓存,与unless相反。可以使用spEL语法

unless:否定缓存,当满足条件时,结果不被缓存。可以获取到结果(#result)进行判断。支持spEL语法

sync:是否异步模式。在该模式下unless不被支持。default=false

@CachePut:先调用方法,在对结果进行缓存。(主要用于PUT方法),需要注意key的设置@CacheEvict:默认先调用方法,在删除缓存(主要用于DELETE方法)allEntries: 删除缓存组件中(cacheNames/value指定)所有的值beforeInvocation:在方法执行之前删除值,default=false@Caching:组合注解。针对复杂情况@CacheConfig:加载类上,用于设置缓存的共有属性

几个属性:

cacheNames/values:指定缓存组件的名字,将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存

key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值

可以用spEL表达式来表示;#id-如(getEmp[1]); 参数id的值:  #a0  #p0  #root.args[0]

keyGenerator:key的生成器;可以自己指定key的生成器的组件id

key/keyGenerator:二选一使用(自己配置类)

cacheManager:指定使用哪个缓存管理器;或者cacheResolver指定获取解析器

condition:指定符合条件的情况下才缓存; 如:condition = "#a0>1"  即第一个参数值大于1时才进行缓存

unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;可以获取到的结果进行判断

如: unless = “#a0”:如果第一个参数值是2,则结果不缓存                unless = “#result == null”  结果为null不缓存结合写法:

@Cacheable(cacheNames = {"emp"},keyGenerator = "myKeyGenerator",condition = "#a0>1",unless =  "#a0==2")  意思为 放在的缓存名称为emp中,key的生成方式为配置的myKeyGenerator类,当第一个参数大于1时候缓存,当第一个参数等于2时不缓存

sync:是否使用异步模式(异步模式情况下unless不支持)

//@Cacheable(cacheNames = {"emp"},key = "#root.methodName+'['+#id+']'")

public Employee getEmp(Integer id){

System.out.println("查询"+id+"号员工");

Employee emp =  employeeMapper.getEmpById(id);

return  emp;

}

此时当id为1时,key的值为 getEmp[1]

@Configuration

public class MyCacheConfig {

@Bean("myKeyGenerator")

public KeyGenerator keyGenerator (){

return  new KeyGenerator(){

@Override

public Object generate(Object o, Method method, Object... objects) {

return method.getName()+"["+ Arrays.asList(objects).toString()+"]";

}

};

};

}

这里返回的key的值为getEmp[[1]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值