开发者学堂课程【SpringBoot快速掌握 - 高级应用:@Cacheable其他属性】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/613/detail/9291
@Cacheable其他属性
其他几个属性:
cacheNames /value:指定缓存组件的名字;将方法的返回值放在哪个缓存中,是数组的方式,可以指定多个缓存;
key:缓存数据使用的 key;可以用它来指定。默认是使用方法参数的值1-方法的返回值。
编写 SpEL;#id;参数 id 的值 #aθ#pθ@#root.args[θ]key
Generator:key 的生成器;
package com. atguigu. cache. config;
importorg.springframework . cache. interceptor . KeyGenerator ;
import org. springframework . context. annotation . Bean;
importorg.springframework . context. annotation . Configuration ;
import java. lang. reflect. Method;
import java. util. Arrays;
@ Configuration
public class MyCacheConfig {
@Bean(" myKeycenerator ")
public KeyGeneratorkeyGenerator (){
return new KeyGenerator (){
@Override
public Object generate(Object target, Method method, Object... params){return
method.getName()+"["+Arrays. aslist(params).toString()+"]";
}
}
}
}
可以自己指定 key 的生成器的组件 id
key/ keyGenerator :二选一使用
cacheManager :指定缓存管理器;或者 cacheResolver 指定获取解析器
condition:指定符合条件的情况下才缓存;
, condition="#id>θ"
condition=“#aθ>1”:第一个参数的值>1的时候才进行缓存
如果查1号员工,发现并没有缓存;查询2号员工,第一次有打印,第二次没有打印说明没有方法进入
condition="#id>0"unless:否定缓存;当 unless 指定的条件为 truve,方法的返回值就不会被缓存;可以获取到结果进行判断 unless="#result==null"
unless=“#aθ==2”:如果第一个参数的值是2,结果不缓存
查询1号员工会打印,且语句发送;查询2号员工没有打印也没有语句发送说明没有缓存。
sync:是否使用异步模式
@paramid
ge return
@Cacheable(value={"emp"}, key="#root. methodName +"['+#id+"]'")) 这样就可以自定义 key
public Employee getEmp(Integer id){
System. out. print\n("査询"+id+"号员工");
Employee emp= employeeMapper . getEmpById (id);
return emp;
}