乐趣区

关于java:Spring缓存之-Cacheable-详细介绍

一、简介
1、缓存介绍
Spring 从 3.1 开始就引入了对 Cache 的反对。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来对立不同的缓存技术。并反对应用 JCache(JSR-107)注解简化咱们的开发。

其应用办法和原理都相似于 Spring 对事务管理的反对。Spring Cache 是作用在办法上的,其核心思想是,当咱们在调用一个缓存办法时会把该办法参数和返回后果作为一个键值对存在缓存中。

2、Cache 和 CacheManager 接口阐明

Cache 接口蕴含缓存的各种操作汇合,你操作缓存就是通过这个接口来操作的。

Cache 接口下 Spring 提供了各种 xxxCache 的实现,比方:RedisCache、EhCache、ConcurrentMapCache

CacheManager 定义了创立、配置、获取、治理和管制多个惟一命名的 Cache。这些 Cache 存在于 CacheManager 的上下文中。

小结:

每次调用须要缓存性能的办法时,Spring 会查看指定参数的指定指标办法是否曾经被调用过,如果有就间接从缓存中获取办法调用后的后果,如果没有就调用办法并缓存后果后返回给用户。下次调用间接从缓存中获取。

二、@Cacheable 注解应用具体介绍

1、缓存应用步骤
@Cacheable 这个注解,用它就是为了应用缓存的。所以咱们能够先说一下缓存的应用步骤:

1、开启基于注解的缓存,应用 @EnableCaching 标识在 SpringBoot 的主启动类上。

2、标注缓存注解即可

① 第一步:开启基于注解的缓存,应用 @EnableCaching 标注在 springboot 主启动类上

② 第二步:标注缓存注解

注:这里应用 @Cacheable 注解就能够将运行后果缓存,当前查问雷同的数据,间接从缓存中取,不须要调用办法。

2、罕用属性阐明
上面介绍一下 @Cacheable 这个注解罕用的几个属性:

cacheNames/value:用来指定缓存组件的名字

key:缓存数据时应用的 key,能够用它来指定。默认是应用办法参数的值。(这个 key 你能够应用 spEL 表达式来编写)

keyGenerator:key 的生成器。key 和 keyGenerator 二选一应用

cacheManager:能够用来指定缓存管理器。从哪个缓存管理器外面获取缓存。

condition:能够用来指定符合条件的状况下才缓存

unless:否定缓存。当 unless 指定的条件为 true,办法的返回值就不会被缓存。当然你也能够获取到后果进行判断。(通过 #result 获取办法后果)

sync:是否应用异步模式。

① cacheNames

用来指定缓存组件的名字,将办法的返回后果放在哪个缓存中,能够是数组的形式,反对指定多个缓存。

② key

缓存数据时应用的 key。默认应用的是办法参数的值。能够应用 spEL 表达式去编写。

③ keyGenerator
key 的生成器,能够本人指定 key 的生成器,通过这个生成器来生成 key。

这样放入缓存中的 key 的生成规定就依照你自定义的 keyGenerator 来生成。不过须要留神的是:

@Cacheable 的属性,key 和 keyGenerator 应用的时候,个别二选一。

④ condition
符合条件的状况下才缓存。办法返回的数据要不要缓存,能够做一个动静判断。

⑤ unless

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

⑥ sync

是否应用异步模式。默认是办法执行完,以同步的形式将办法返回的后果存在缓存中。

3、spEL 编写 key
后面说过,缓存的 key 反对应用 spEL 表达式去编写,上面总结一下应用 spEL 去编写 key 能够用的一些元数据:

退出移动版