五分钟了解Spring中的@Cacheable,CachePut,@CacheEvict 的详细用法

注意:演示中的所有方法中的key是相同的,这样方便演示。
在方法中 @Cacheable用法演示:

 @Cacheable(value = "cache",key = "1")
    public String key1(){
        return "1";
    }
    @Cacheable以键子对的形式进行缓存,用key属性去取value属性中的值,
    value值为cache,cache存放key1()方法返回的" 1 ";
@Cacheable(value = "cache",key = "1")
    public String key1(){
        return "1";
    }

    @Cacheable(value = "cache",key = "1")
    public String key2(){
        return "2";
    }
    执行两个方法,当key为同一个时获取的值以第一个方法的值放入缓存为准,
    如:先执行key1()方法,那么 key1()和key2()缓存中值都为1;
    相反先执行key2()方法,那么 key1()和key2()缓存中值都为2;
    由此得出结论 缓存中一个key对应一个值,并且不可修改。
    
    实事上:@Cacheable在执行方法时会去判断key在缓存中是否有对应的值,
    如果有值那么此方法就不执行,所以先执行key1()方法后,key在缓存中有对应的值,
    则不会执行key2()方法而是直接从缓存中取值。

那么问题就来了,怎么修改或清除缓存呢
下面的注解就是答案

@CachePut用法演示:

@CachePut(value = "cache",key = "1")
    public String key1(){
        return "1";
    }

    @CachePut(value = "cache",key = "1")
    public String key2(){
        return "2";
    }
    结果是:key1()返回1,key2()返回2
    事实上:@CachePut在执行方法时,不会去检查key在缓存中是否有值,而是直接执行方法,如果缓存有对应的值就更新值,没有就赋值。

使用@Cacheable和@CachePut也能实现清除缓存的功能,利用@CachePut会直接执行方法的特性

@Cacheable(value = "cache",key = "1")
    public String key1(){
        return "1";
    }

    @CachePut(value = "cache",key = "1")
    public String key2(){
        return "";
    }
    执行key1方法()在缓存中加入1的值,执行key2()方法更新key在缓存中对应的值为"",不过不推荐此方法

@CacheEvict清除缓存演示


@Cacheable(value = "cache",key = "1")
    public String key1(){
        return "1";
    }

@CacheEvict(value = "sysConfig",key = "1")
    public void removeKey(){
    }

@Cacheable(value = "cache",key = "1")
    public String key2(){
        return "";
    }
结果:1 
     3
     如果去掉中间的removeKey()方法,结果都为1,原因就是@Cacheable有了key对应缓存的值后不会再执行相同key的方法。
@CacheEvict(value = "cache",allEntries = true)
    public void removeKey(){
    }
    此方法为清空 cache缓存中所有的值

你可能感兴趣的:(五分钟了解Spring中的@Cacheable,CachePut,@CacheEvict 的详细用法)