1.1@Cacheable的cacheNames/value属性
? cacheNames属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。其可以是一个**Cache也可以是多个Cache**,**当需要指定多个Cache时其是一个数组**
@Cacheable(cacheNames="cache1")
public String sc(){
return "aaa"; //将值aaa存到了cache1里
}
@Cacheable(cacheNames={"cache1","cache2"})
public String sc(){
return "aaa";
}
1.2@Cacheable的key属性
key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key
自定义策略是指我们可以通过Spring的EL表达式来指定我们的key。这里的EL表达式可以使用方法参数及它们对应的属性。使用方法参数时我们可以直接**使用“#参数名”或者“#p参数index”**
1.设置为当前方法名:#root.methodName
2.当前被调用的目标对象:#root.target
3.当前被调用用的目标对象:#root.targetClass
4.当前方法中的对象:#root.args[0]
5.自定义Key
@Cacheable(value="cache1",key="#id") //这个是声明了一个id
public String sc(){
return "aaa";
}
@Cacheable(value="cache1",key="#p0")//这个相当于设置的下标
public String sc(){
return "aaa";
}
@Cacheable(value="cahae1",key="#id.aa")//这个相当于对象的一个属性
public String sc(){
return "aaa";
}
@Cacheable(value="cache1",key="#p0.aa")
public String sc(){
return "aaa";
}
1.3 condition:当满足条件时进行缓存
@Cacheable(condition="i>0")
public void sc(int i){
}
1.4 unless :当满足条件时不进行缓存
@Cacheable(unless= "#result == null")
public int sc(int i){
return 100;
}
可以使用#result来调用返回值
3.@CachePut 修改缓存
在使用@CachPut注解的时候要设定和查询方法一样的key,不然当进行修改的时候修改成功但是key不同他会查不到
@Cachable(value={"test"},key="#id")
public Result select(String id){
return value;
}
@CachPut(value={"test"},key="#root.args[0].id")
public Result update(User user){
return value;
}
这样的话两个key是一样的,删除也是同理
4.@CacheEvict 删除缓存
4.1根据key删除
@CacheEvict(value="test",key="#id")//这个是根据key删除
public Result delete(String id){
}
4.2删除全部(默认关闭)
@CacheEvict(value="test",allEntries=true)
public void delete(String id){
}