一、介绍1、缓存介绍Spring从3.1开始就引入了对Cache的支持。org.springframework.cache.Cache和org.springframework.cache.CacheManager接口的定义是为了统一不同的缓存技术。并且支持使用JCache(JSR-107)注解来简化我们的开发。它的用法和原理类似于Spring对事务管理的支持。SpringCache作用于方法,其核心思想是当我们调用缓存方法时,方法参数和返回结果会以键值对的形式存储在缓存中。2.Cache和CacheManager接口说明Cache接口包括各种缓存操作的集合,您可以通过该接口对缓存进行操作。在Cache接口下,Spring提供了各种xxxCache的实现,如:RedisCache、EhCache、ConcurrentMapCacheCacheManager定义了多个唯一命名的Cache的创建、配置、获取、管理和控制。这些缓存存在于CacheManager的上下文中。总结:每次调用需要缓存的方法时,Spring都会检查指定参数的指定目标方法是否被调用过。如果是,则直接从缓存中获取方法调用的结果。如果没有,它将调用该方法并缓存结果。返回给用户。下一次调用直接从缓存中获取。二、@Cacheable注解的使用详细介绍1、使用缓存的步骤@Cacheable这个注解是用来使用缓存的。所以我们可以先说一下使用缓存的步骤:1.开启基于注解的缓存,在SpringBoot的主启动类上使用@EnableCaching来标记。2.只标注缓存注解①第一步:开启基于注解的缓存,在springboot主启动类上使用@EnableCaching标注②第二步:标注缓存注解注意:这里使用@Cacheable注解缓存运行结果,以后同样的数据不用调用方法直接从缓存中查询。2.常用属性说明这里是@Cacheable注解的一些常用属性:cacheNames/value:用于指定缓存组件的名称key:缓存数据时使用的key,可以用来指定。默认是使用方法参数的值。(你可以用spEL表达式来写这个密钥)keyGenerator:密钥生成器。Key和keyGenerator选择一个使用cacheManager:它可以用来指定缓存管理器。从哪个缓存管理器获取缓存。condition:可以用来指定满足条件才缓存unless:否定缓存。当unless指定的条件为真时,方法的返回值将不会被缓存。当然你也可以获取结果进行判断。(通过#result获取方法结果)sync:是否使用异步方式。①cacheNames用于指定缓存组件的名称,将方法的返回结果放在哪个缓存中,可以是数组形式,支持指定多个缓存。②key缓存数据时使用的key。默认情况下,使用方法参数的值。可以使用spEL表达式编写。③keyGenerator密钥生成器,可以自己指定密钥生成器,通过这个生成器生成密钥。这样放在缓存中的key生成规则就会根据你自定义的keyGenerator生成。不过需要注意的是,在使用@Cacheable属性key和keyGenerator的时候,一般是两者选其一。④条件满足时才缓存条件。方法返回的数据是否缓存,可以动态判断。⑤除非否定缓存。当unless指定的条件为真时,方法的返回值将不会被缓存。⑥sync是否使用异步方式。默认情况下,方法执行后,方法返回的结果会同步保存在缓存中。3.SpEL写key前面提到缓存的key支持用spEL表达式写,下面总结一些可以用spEL写key的元数据:
