spring boot redis 缓存注解使用教程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot redis 缓存注解使用教程相关的知识,希望对你有一定的参考价值。
参考技术A <meta charset="utf-8">Spring Boot缓存注解介绍
Spring Boot缓存注解介绍
本文介绍在使用Spring缓存时,所应用到的一些注解和相对应的属性,并对其相关功能进行较为详细的介绍。
1. @EnableCaching注解
@EnableCaching是由spring框架提供的,SpringBoot矿建对该注解进行了继承。该注解需要配置在类上(一般配置在SpringBoot启动类啥葛),用于开启经济与注解的缓存支持。
@EnableCaching //SpringBoot开启缓存注解支持
@SpringBootApplication
public class DemoApplication
public static void main(String[] args)
ConfigurableApplicationContext app = SpringApplication.run(DemoApplication.class, args);
2. @Cacheable注解
@Cacheable注解也是由spring框架提供,可用作于类或方法上(通常用在数据查询方法上),对方结果进行缓存存储。@Cacheable注解的执行顺序时先进性缓存查询,如果为空则进行方法查询,并将结果进行缓存,如果缓存中有数据,不进行方法查询,而是直接使用缓存数据。
@Cacheable注解相关属性
- value/cacheNames:指定缓存空间的名称,比配属性。可二选一使用。
- key:指定缓存中数据的key,默认使用方法参数值,也可使用SPEL表达式。
- keyGenerator:指定缓存数据的key的生成器,与key属性二选一使用。
- cacheManager:指定缓存的管理器
- cacheResolver:指定缓存的解析器,与cacheManager属性二选一使用。
- condition:指定在符合某种条件下,进行数据缓存。
- unless:指定在符合某种条件下不进行数据缓存。
- sync:指定是否使用异步缓存,默认为false。
3. @CachePut注解
@CachePut 注解是由Spring框架提供的,可以作用于类或方法(通常用在数据更新方法上),该注解的作用是更新缓存数据。@CachePut注解的执行顺序是,先进行方法调用,然后将方法结果更新到缓存中。
@CachePut 注解也提供了多个属性,这些属性与@Cacheable注解的属性完全相同。
4. @CacheEvict注解
@CacheEvict 注解是由 Spring框架提供的,可以作用于类或方法(通常用在数据删除方法上),该注解的作用是删除缓存数据。@CacheEvict注解的默认执行顺序是,先进行方法调用,然后将缓存进行清除。
@CacheEvict注解也提供了多个属性,这些属性与@Cacheable注解的属性基本相同,除此之外,还额外提供了两个特殊属性allEntries和beforeInvocation。
- allEntries_属性:
allEntries属性表示是否清除指定缓存空间中的所有缓存数据,默认值为false(即默认只删除指定key对应的缓存数据)。例如@CacheEvict(cacheNames = “comment” allEntries = true)表示方法执行后会删除缓存空间comment中所有的数据。- beforeInvocation 属性:
beforeInvocation属性表示是否在方法执行之前进行缓存清除,默认值为 false(即默认在执行方法后再进行缓存清除)。例如@CacheEvict(cacheNames = “comment”, beforeInvocation = true)表示会在方法执行之前进行缓存清除。- 需要注意的是,如果将@CacheEvict注解的 beforeInvocation属性设置为true,会存在一定的弊端。例如在进行数据珊除的方法中发生了异常,这会导致实际数据并没有被删除,但是缓存数据却被提前清除了。
5. @Caching注解
@Caching注解用于针对复杂规则的数据缓存管理,可以作用于类或方法,在@Caching注解内部包含有Cacheable、put和evict三个属性,分别对应于@Cacheable、@CachePut和@CacheEvict三个注解,示例代码如下。
@Caching(cacheable=8cacheable (gacheNames ="comment".,key = "帮id"),
put = RCachePut(cacheNames = "comment".,key.= "#result.author"))
public Comment getcoiment(int comment id)
return commentRepository.fi.ndByld(comment id).get();
上述代码中,getComment)方法使用了@Caching 注解,并使用cacheable和 put两个属性嵌套引入了@Cacheable和@CachePut两个注解,分别以id、和 author为缓存key 值,以查询结果Comment为缓存value值进行缓存管理。
6. @CacheConfig注解。
@CacheConfig …注解使用在类上,主要用于统筹管理类中所有使用@Cacheable、@CachePut…和@CacheEvict 注解标注方法中的公共属性,这些公共属性包括有cacheNames、keyGenerator 、cacheManager和cacheResolver,示例代码如下。
@CaaheConfig.(caaheNames - "comment")service
public class CommsntService
@Autowired
private CommentRepository commentRepository;
public Comment findById(int comment. id)
Comment comment = commentRepository.findById(commenc..id).get ();
return comment;
上述代码中,CommentService类上标注了@CacheConfig 注解,同时使用cacheNames.属性将缓存空间统―设置为comment,这样在该类中所有方法上使用缓存注解时可以省略相应的cacheNames属性。
需要说明的是,如果在类上使用了@CacheConfig,注解定义了某个属性(例如cacheNames),同时又在该类方法中使用缓存注解定义了相同的属性,那么该属性值会使用“就近原则”选择以方法上注解中的属性值为准。
以上是关于spring boot redis 缓存注解使用教程的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot (24) 使用Spring Cache集成Redis