SpringBoot缓存@EnableCaching和使用缓存@Cacheable

一 开启缓存@EnableCaching

@SpringBootApplication
@EnableCaching
public class RedisApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }

}

二 开始使用@Cacheable

    @Cacheable(value = "idCache", key = "#id")
    public Employee list2(Integer id){
        return employeeDao.list3(id);
    }

    @Cacheable(value = "idCache", key = "#id", condition = "#id>1000")
    public Employee list3(Integer id){
        return employeeDao.list3(id);
    }
  • 在service方法上标注 @Cacheable(value = “idCache”, key =
    “#id”),这个注释的意思是,当调用这个方法的时候,会从一个名叫
    idCache的缓存中查询key为id的值,如果不存在,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的
    key 就是参数 id,value 就是 返回的Employee 对象。
  • condition = "#id>1000"就是如果id>1000则结果放入缓存,否则不放入缓存,注意:id要为Integer类型
  • 如果list3中缓存了1001的数据,list2请求1001会直接从缓存中获取,前提是value,key要相同的存储方式和类型,如果list2中key的id是String类型就达不到这个效果

也可以自定义key参数名:

SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第1张图片

自定义 key = 类名.方法名.参数值,#root可以省略所以就是:
key=“targetClass.getName()+’.’+methodName+’.’+#id”

Cacheable注解详情

    //与cacheNames相同,@AliasFor是取别名
    @AliasFor("cacheNames")
    String[] value() default {};
    @AliasFor("value")
    //缓存组件名,数据存在缓存组件中以key:value的形式存储
    String[] cacheNames() default {};
    
	//与keyGenerator 2选1只能用一个,就是缓存的key
    String key() default "";
	//key的生成器;可以自己指定key的组件id 与上面的key二选一使用
    String keyGenerator() default "";
	//指定缓存管理器;或者cacheResolver指定获取解析器
    String cacheManager() default "";
    //
    String cacheResolver() default "";
    //指定符合条件的情况才缓存,例如condition="#id>0"
    String condition() default "";
    /*
    否定缓存,当unless指定条件为true,方法返回值就不会被缓存;
    可以获取到结果进行判断。 unless="#result==null"
    */
    String unless() default "";
    //是否使用异步模式
    boolean sync() default false;

1 value和cacheNames的作用相同

用来指定缓存组件的名字,将方法的返回结果放在哪个缓存中,可以是数组的方式,支持指定多个缓存
SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第2张图片

2 keyGenerator

key 的生成器,可以自己指定 key 的生成器,通过这个生成器来生成 key。
SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第3张图片
SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第4张图片

这样放入缓存中的 key 的生成规则就按照你自定义的 keyGenerator 来生成。不过需要注意的是:

@Cacheable 的属性,key 和 keyGenerator 使用的时候,一般二选一。

3 unless否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。

SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第5张图片

4 condition = "#id>1000"就是如果id>1000则结果放入缓存,否则不放入缓存

5 CacheManager缓存管理

SpringBoot中默认以ConcurrentMapCacheManager作为CacheManager的实现类,当然也可以手动配置成RedisCacheManager,ehcache,guava等。

SpringBoot缓存@EnableCaching和使用缓存@Cacheable_第6张图片

你可能感兴趣的:(SpringBoot,缓存,spring,java)