【Springboot总结】32 缓存的注解

一般缓存数据的操作,我们会在业务层处理

 

一、Cacheable

 

 1. 

 

2. 

自定义key,比如把key设置成:方法名[参数] 

 

3. 

自定义KeyGenerator来生成自定义的key

 

4. 

 

5. 

上述的condition与unless都是支持SpEL表达式的,而且二者是的关系

 

6. 

sync与unless不可以同时使用 

 

二、CachePut

【注意】查询方法的结果放入缓存中时,key是方法参数,也就是对象的id。因为没有特殊配置,所以是默认的key

【注意】修改的方法,key需要特殊指定,否则采用默认的不会把key对应的value数值覆盖。最终目的就是实现修改方法的key也是对象的id。

 

 

三、CacheEvict

 

(1)指定key删除

(2)清楚指定的缓存

(3)beforeInvocation

【提示】10/0就是模拟异常

 

四、Caching

这个@Caching有点像上面三个的组合注解

 

拓展:CacheConfig

【提示】CacheConfig是没有value的!指定缓存的名称时只能使用cacheNames。使用该注解进行统一指定之后,类下的方法就不需要再指定了。

### Spring Boot 缓存注解及其使用方法 #### 启用缓存管理 为了启用Spring Boot中的缓存功能,在应用程序的主要配置类或启动类上添加`@EnableCaching`注解是必要的[^5]。 ```java import org.springframework.cache.annotation.EnableCaching; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### `@Cacheable` 此注解用于声明一个方法的结果可以被缓存。当调用该方法时,如果参数相同,则不会重新计算而是返回之前存储的结果。这有助于减少重复的数据库查询或其他耗时操作[^1]。 ```java @Service public class ArticleService { @Autowired private ArticleRepository articleRepository; @Cacheable(value = "articles", key = "#id") public Article getArticleById(Long id){ return articleRepository.findById(id).orElse(null); } } ``` 上述代码片段展示了如何通过指定缓存名称(`value`)以及键生成策略(`key`)来定义哪些数据应该被保存到特定命名的空间内,并基于输入参数作为唯一标识符进行检索。 #### `@CachePut` 每当更新某个对象的状态而不希望影响现有缓存条目时可使用这个注解;它允许你在不影响其他地方获取旧版本的同时修改实体的内容。通常情况下,我们会将其放置于服务层的方法之上以便能够精确控制何时何地触发更新行为。 ```java @CachePut(value="articles", key="#article.id") public Article updateArticle(Article article){ // 更新逻辑... return articleRepository.save(article); } ``` 这里的关键在于即使我们改变了文章的信息,原来的缓存记录仍然会被保留下来直到下一次读取为止——这时才会反映出最新的更改情况。 #### `@CacheEvict` 用来清除一条或多条缓存项。可以通过设置属性如`allEntries=true`清空整个区域内的所有元素,也可以利用条件表达式仅移除符合条件的对象实例。这对于维护最新最准的数据至关重要,尤其是在频繁写入场景中防止脏读现象的发生。 ```java @CacheEvict(value="articles", allEntries=true) public void clearAllArticles(){ } // 或者有条件删除单个条目 @CacheEvict(value="articles", key="#id") public void deleteArticleById(Long id){ articleRepository.deleteById(id); } ``` #### 组合使用的`@Caching` 有时候可能需要在一个方法上调用多个不同的缓存操作,比如先查找再更新最后清理过期数据等复杂流程。这时候就可以借助`@Caching`来进行组合式的标注,从而简化代码结构并提高灵活性。 ```java @Caching( cacheable = {@Cacheable(value = "articles", key = "#id")}, put = {@CachePut(value = "recentlyUpdatedArticles", key = "#result.id")} ) public Article findAndUpdateArticle(Long id, String newContent){ Article updatedArticle = this.updateArticle(new Article(id, newContent)); return updatedArticle; } ``` 以上便是关于Spring Boot内置四种核心缓存注解的基本介绍及简单示例说明。这些工具可以帮助开发者轻松实现高效的内存级数据暂存机制,进而提升整体性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值