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注解相关属性

  1. value/cacheNames:指定缓存空间的名称,比配属性。可二选一使用。
  2. key:指定缓存中数据的key,默认使用方法参数值,也可使用SPEL表达式。
  3. keyGenerator:指定缓存数据的key的生成器,与key属性二选一使用。
  4. cacheManager:指定缓存的管理器
  5. cacheResolver:指定缓存的解析器,与cacheManager属性二选一使用。
  6. condition:指定在符合某种条件下,进行数据缓存。
  7. unless:指定在符合某种条件下不进行数据缓存。
  8. 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),同时又在该类方法中使用缓存注解定义了相同的属性,那么该属性值会使用“就近原则”选择以方法上注解中的属性值为准。

猜你喜欢

转载自blog.csdn.net/weixin_44676935/article/details/109407062