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){
     
     }