第 4-4 课:Spring Boot 中使⽤ Cache 缓存的使⽤
- ⽀持开箱即⽤ Out-Of-The-Box,即不⽤安装和部署额外第三⽅组件即可使⽤缓存;
- ⽀持 Spring Express Language,能使⽤对象的任何属性或者⽅法来定义缓存的 key 和 condition;
- ⽀持 AspectJ,并通过其实现任何⽅法的缓存⽀持;
- ⽀持⾃定义 key 和⾃定义缓存管理者,具有相当的灵活性和扩展性。
Spring Boot 中 Cache 的使⽤
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
@Cacheable
@RequestMapping("/hello")
@Cacheable(value="helloCache")
public String hello(String name) {System.out.println("没有⾛缓存!");return "hello "+name;
}
- value:缓存的名称。
- key:缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写;如果不指定,则缺省按照⽅法的所有 参数进⾏组合。
- condition:触发条件,只有满⾜条件的情况才会加⼊缓存,默认为空,既表示全部都加⼊缓存,⽀持 SpEL。
@RequestMapping("/condition")
@Cacheable(value="condition",condition="#name.length() <= 4")
public String condition(String name) {System.out.println("没有⾛缓存!");return "hello "+name;
}
@RequestMapping("/getUsers")
@Cacheable(value="usersCache",key="#nickname",condition="#nickname.length() >= 6")
public List<User> getUsers(String nickname) {List<User> users=userRepository.findByNickname(nickname);System.out.println("执⾏了数据库操作");return users;
}
Hibernate: select user0_.id as id1_0_, user0_.email as email2_0_, user0_.nickname
as nickname3_0_, user0_.pass_word as pass_wor4_0_, user0_.reg_time as reg_time5_0_
, user0_.user_name as user_nam6_0_ from user user0_ where user0_.nickname=?
执⾏了数据库操作
@CachePut
@RequestMapping("/getPutUsers")
@CachePut(value="usersCache",key="#nickname")
public List<User> getPutUsers(String nickname) {List<User> users=userRepository.findByNickname(nickname);System.out.println("执⾏了数据库操作");return users;
}
INSERT INTO `user` VALUES ('1', 'ityouknow@126.com', 'ityouknow', '123456', '2018'
, 'keepSmile');
- value 缓存的名称。
- key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照⽅法的所有 参数进⾏组合。
- condition 缓存的条件,可以为空,使⽤ SpEL 编写,返回 true 或者 false,只有为 true 才进⾏缓存。
@CacheEvict
allEntries 属性
@RequestMapping("/allEntries")
@CacheEvict(value="usersCache", allEntries=true)
public List<User> allEntries(String nickname) {List<User> users=userRepository.findByNickname(nickname);System.out.println("执⾏了数据库操作");return users;
}
beforeInvocation 属性
@RequestMapping("/beforeInvocation")
@CacheEvict(value="usersCache", allEntries=true, beforeInvocation=true)
public void beforeInvocation() {throw new RuntimeException("test beforeInvocation");
}
总结⼀下其作⽤和配置⽅法
@Cacheable 作⽤和配置⽅法
主要参数 |
解释 |
举例例 |
value |
缓存的名称,在 spring 配置⽂文件中定义,必须指定⾄至少⼀一个 |
如 @Cacheable(value="mycache") 或者 @Cacheable(value= {"cache1","cache2"} |
key |
缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不不指定,则缺省按照⽅方法的所 有参数进⾏行行组合 |
如@Cacheable(value="testcache", key="#userName") |
condition |
缓存的条件,可以为空,使⽤用 SpEL 编写,返回true 或者 false,只有为 true 才进⾏行行缓存 |
如@Cacheable(value="testcache", condition="#userName.length()>2") |
@CachePut 作⽤和配置⽅法
主要参数 |
解释 |
举例例 |
value |
缓存的名称,在 spring 配置⽂文件中定义,必须指定⾄至少⼀一个 |
如 @Cacheable(value="mycache") 或者 @Cacheable(value= {"cache1","cache2"} |
key |
缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不不指定,则缺省按照⽅方法的所 有参数进⾏行行组合 |
如@Cacheable(value="testcache", key="#userName") |
condition |
缓存的条件,可以为空,使⽤用 SpEL 编写,返回true 或者 false,只有为 true 才进⾏行行缓存 |
如@Cacheable(value="testcache", condition="#userName.length()>2") |
@CacheEvict 作⽤和配置⽅法
主要参数 |
解释 |
举例例 |
value |
缓存的名称,在 spring 配置⽂文件中定义, 必须指定⾄至少⼀一个 |
如 @CachEvict(value="mycache") 或者 @CachEvict(value= {"cache1","cache2"} |
key |
缓存的 key,可以为空,如果指定要按照SpEL 表达式编写,如果不不指定,则缺省按照⽅方法的所有参数进⾏行行组合 |
如@CachEvict(value="testcache", key="#userName") |
condition |
缓存的条件,可以为空,使⽤用 SpEL 编写,返回 true 或者 false,只有为 true 才清空缓存 |
如 @CachEvict(value="testcache", condition="#userName.length()>2") |
allEntries |
是否清空所有缓存内容,缺省为 false,如果指定为 true,则⽅方法调⽤用后将⽴立即清空所有缓存 |
如@CachEvict(value="testcache", allEntries=true) |
beforeInvocation |
是否在⽅方法执⾏行行前就清空,缺省为 false, 如果指定为 true,则在⽅方法还没有执⾏行行的时候就清空缓存,缺省情况下,如果⽅方法执⾏行行抛出异常,则不不会清空缓存 |
如@CachEvict(value="testcache", beforeInvocation=true) |
总结
第 4-4 课:Spring Boot 中使⽤ Cache 缓存的使⽤相关推荐
- 在Spring Boot中使用数据缓存
关注公众号[江南一点雨],专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货! 春节就要到了,在回家之前要 ...
- Spring Boot 中使⽤ Cache 缓存的使⽤
1.美图 2.概述 我们知道绝⼤多数的⽹站/系统,最先遇到的一个性能瓶颈就是数据库,使⽤用缓存做数据库的前置缓存,可以非常有效地降低数据库的压力,从而提升整个系统的响应效率和并发量. 以往使⽤缓存时, ...
- SpringBoot : Spring Boot中使用数据缓存 spring-boot-starter-cache
1.美图 2.概述 项目中经常会用到cache技术,Spring boot提供了方便的注解以便我们从重复的cache代码中解放出来. 首先得引入spring-boot-starter-cache这个j ...
- Spring Boot中的缓存支持(二)使用Redis做集中式缓存
上一篇介绍了在Spring Boot中如何引入缓存.缓存注解的使用.以及EhCache的整合. 虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各 ...
- 在controller中调用指定参数给指定表单_第005课:Spring Boot 中MVC支持
Spring Boot 的 MVC 支持主要介绍实际项目中最常用的几个注解,包括 @RestController. @RequestMapping.@PathVariable.@RequestPara ...
- 徒手解密 Spring Boot 中的 Starter自动化配置黑魔法
我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...
- 如何在Spring Boot中玩转智能合约【修订版】
本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一. 什么是 web3j web3j是一个高度模块化.响 ...
- 如何在Spring Boot中玩转智能合约
本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一.什么是 web3j web3j是一个高度模块化.响应 ...
- Spring Boot中使用Swagger2构建RESTful APIs
关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...
最新文章
- 1.二叉树的中序遍历
- linux 创建连接命令 ln -s 软连接
- java树形菜单_Java构建树形菜单
- android aar项目_Android-我所认知的VLayout
- Spark 训练机器学习模型莫名报错(java.lang.stackoverflow)
- 嵌入式软件架构设计(转载)
- 文献调研(一):基于集成学习和能耗模式分类的办公楼小时能耗预测
- 那些简历造假拿 Offer 的程序员,后来都怎样了?
- JavaScript数组方法整理
- 情人节——圣瓦伦丁节(St. Valentine's Day)
- 2010.12.29(2)——— android GridView
- python中的阶乘,python中阶乘怎么表示
- 计算机能力用英语介绍自己的家庭,介绍我的家庭英语作文(精选10篇)
- 米思齐(Mixly)图形化系列教程(六)-for循环
- 智能网联车路协同智慧交通沙盘+无人驾驶汽车+多车协同调度系统
- CREATE VIEW
- 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)​
- vi编辑器壁纸(1440x900)
- Magento 批量刷入 Amazon上的产品评论
- 网络爬虫框架——Scrapy框架解析