在SpringBoot项目中使用redis简单用法(一)
基本准备
首先肯定是需要将Redis的包和Redis链接配置好
这里以maven作为项目构建工具,所以直接在POM文件中引入的Redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
接下来就是Redis链接的配置
spring:
redis:
host: 127.0.0.1
port: 6379
简单使用
@EnableCaching
想要使用注解的方式来使用Redis缓存,那么首先就是得使能缓存,在Application.java上添加该注解
@SpringBootApplication
@EnableCaching
public class SellApplication {
public static void main(String[] args) {
SpringApplication.run(SellApplication.class, args);
}
}
@Cacheable
@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。
对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。
@GetMapping("/info")
@Cacheable(cacheNames = "product", key = "123")
public ResultVO findOne(@Param("productId") String productId) {
log.info("Get from database ...");
// 从数据库获取数据, ProductInfo必须实现Serializable
ProductInfo productInfo = productService.findOne(productId);
return ResultVOUtil.success(productInfo);
}
cacheNames: 缓存的名称,不能为空
key: 缓存的 key,可以为空
key可以使用SpEL 表达式编写,实现动态key。
@GetMapping("/info")
@Cacheable(cacheNames = "product", key = "#productId")
public ResultVO findOne(@Param("productId") String productId) {
log.info("Get from database ...");
ProductInfo productInfo = productService.findOne(productId);
return ResultVOUtil.success(productInfo);
}
这里只有当productId被缓存过,才会调用缓存中的数据。如果没有被访问过,那么还是会先从数据库中获取再缓存的。
condition:缓存的条件,可以为空,使用 SpEL 编写
@GetMapping("/info")
@Cacheable(cacheNames = "product", key = "#productId", condition="#productId >= 3 ")
public ResultVO findOne(@Param("productId") Integer productId) {
log.info("Get from database ... " + productId);
ProductInfo productInfo = productService.findOne(String.valueOf(productId));
return ResultVOUtil.success(productInfo);
}
这里设置了condition="#productId >= 3 ",所以只有当接口参数productId>=3的时候才会进行缓存
unless: 排除条件,除非…
因为我们返回的ResultVO 是经过封装的,如果一切正常的话,那么ResultVO 中的code值应该是0,所以可以利用unless来进行判断
@GetMapping("/info")
@Cacheable(cacheNames = "product", key = "#productId", unless="#result.getCode() != 0 ")
public ResultVO findOne(@Param("productId") Integer productId) {
log.info("Get from database ... " + productId);
ProductInfo productInfo = productService.findOne(String.valueOf(productId));
if(productInfo == null) {
return ResultVOUtil.error(-1, "Null Product");
}
return ResultVOUtil.success(productInfo);
}
unless="#result.getCode() != 0 "表示,只有当ResultVO 中的code值等于0的时候才缓存。
与condition不同的是,unless表达式是在方法调用之后进行评估的。如果返回false,才放入缓存(与condition相反)。
@CachePut
如果缓存需要更新,则可以使用@CachePut
@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
@PostMapping("/update")
@CachePut(cacheNames = "product", key = "#productForm.productId")
public ResultVO update(@RequestBody ProductForm productForm) {
ProductInfo productInfo = new ProductInfo();
BeanUtils.copyProperties(productForm, productInfo);
productService.save(productInfo);
return ResultVOUtil.success(productInfo);
}
@CacheEvict
@CacheEvict要求指定一个或多个缓存,使之都受影响。此外,还提供了一个额外的参数allEntries 。表示是否需要清除缓存中的所有元素。默认为false,表示不需要。当指定了allEntries为true时,将忽略指定的key。有的时候我们需要Cache一下清除所有的元素。
@CacheConfig
@CacheConfig是一个类级别的注解,允许共享缓存的名称(CacheName)、KeyGenerator、CacheManager 和CacheResolver。
在SpringBoot项目中使用redis简单用法(一)相关推荐
- 如何在springboot项目中添加redis 缓存?
Redis简介 Redis(Remote Dictionary Server )远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存也可持久化的日志型.Key-Value数据库. ...
- SpringBoot项目中,Redis的初次使用
1.引入Redis依赖包,在application.yml中配置redis <dependency><groupId>org.springframework.boot</ ...
- Springboot 项目中使用redis 的List结构来实现缓存分页分页
1.自定义标签 /** * @author gzy * 元注解 标识需要缓存分页的方法 */@Documented @Target(ElementType.METHOD) @Retention(Ret ...
- Spring Cloud Alibaba微服务项目中集成Redis实现分布式事务锁实践
引言 我们知道同一个进程里面为了解决资源共享而不出现高并发的问题可以通过高并发编程解决,通过给变量添加volatile关键字实现线程间变量可见:通过synchronized关键字修饰代码块.对象或者方 ...
- 【Java项目中 利用Redis实现数据缓存】
文章目录 Java SpringBoot项目中 用Redis实现数据缓存 1 环境搭建 1.1 maven坐标 1.2 配置文件 1.3 配置类 2 实现缓存短信验证码 3 缓存菜品数据 4 Spri ...
- 亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像)
亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像) 大噶好,我们继续延续上一章,学习如何使用OSS存放用户头像代码示例; 在application.propert ...
- pycharm项目中如何安装包_如何将Thymeleaf技术集成到SpringBoot项目中
给天气预报一个"面子" 截至目前,不仅有了天气预报的API接口,也有了数据的缓存方案.现在,就要进行天气预报服务的实现,也就是说,这里需要一个面向用户的应用.这个应用应该拥有友好的 ...
- SpringBoot项目中ModelMapper配置以及使用
项目中对象与对象赋值转换使用的频率非常的高,比如数据库表实体对象(Entity)与业务类对象(Model)之间的赋值传递,或者模型对象(Model)与视图对象(ViewModel)之间的赋值传递.如果 ...
- SpringBoot项目中集成第三方登录功能
SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...
最新文章
- python 引用文件中的类 报错_Python学习笔记7 头文件的添加规则(转载)
- 12306 抢票软件已被限制
- suse linux 光盘安装教程,suse11一键安装光盘制作
- 用计算机写作文教学反思,语文作文教学反思(精选6篇)
- Rasa 聊天机器人Rasa_NLU_Chi
- Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片
- 元宇宙「虚拟世界」,构建身临其境的社交世界
- 新司机的黑裙战斗机 篇四:新司机的黑群晖指北—软件篇(下)
- (13.1.2)PMBOK之二:五大过程组及其涉及的输入、输出、工具技术
- FlatBuffer
- 排气控制系统--中英文翻译
- [考研政治]唯物史观-xp
- ξσ Dicky's GuestBook σξ
- 超详细的AD8031ARZ介绍,就在这里
- html标签手册 360doc,360doc网文摘手
- SCons简单入门(一)
- linux 进程间通信方式
- p1口实验_威海2SK-P1两级水环式真空泵及压缩机多少钱
- 如何更改cad块编辑的背景颜色
- 国密算法SM4对本地文件加解密
热门文章
- OSChina 周一乱弹 —— 嫂子我帮你们照顾放心吧
- BZOJ1396:识别子串(SAM)
- android 每个块半径不同的扇形图,自定义view
- 微服务实战之春云与刀客(三)—— 面向接口调用代码结构实例
- 使用sqlite保存数据返回主键
- Linux10-归档、系统间复制文件
- next.js_Next.js手册
- monorepo_Monorepo开发的要点
- 安全工程师2017年真题_以下是2017年全球软件工程师的平均薪水
- nginx和mysql链接_nginx转发mysql连接