Spring Boot 集成 Redis 实战教程

前言

在高并发、大数据量的应用场景中,缓存是提升系统性能的关键技术。Redis 凭借其卓越的读写性能、丰富的数据结构和高可用性,成为开发者常用的缓存工具。本教程将严格依据Spring 官方文档与Redis 官方文档,详细介绍 Spring Boot 与 Redis 的集成步骤。

一、创建 Spring Boot 项目

Spring Initializr 是创建 Spring Boot 项目的官方推荐方式,通过它能快速生成包含 Redis 依赖的项目骨架:

  1. 访问Spring Initializr 官网;

  2. 在页面中填写项目基本信息,如Group(组织标识符)、Artifact(项目名称);

  3. Dependencies(依赖)搜索框中输入Redis,选择Spring Data Redis

  4. 点击Generate生成项目压缩包,解压后使用 IDE 打开。

也可通过 IDE(如 IntelliJ IDEA)的New Project向导,选择Spring Initializr,按上述步骤完成项目创建。

二、引入 Redis 依赖

根据 Spring Boot 官方文档,spring-boot-starter-data-redis依赖整合了 Redis 操作所需的核心功能。在pom.xml文件中,默认情况下创建项目时已包含该依赖,若缺失,可手动添加:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

该依赖默认使用Lettuce作为 Redis 客户端,Lettuce是基于 Netty 的响应式客户端,在多线程环境下表现出色。若需使用传统的Jedis客户端,参考官方文档,可添加如下配置:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

三、配置 Redis 连接信息

Spring Boot 官方文档提供了多种配置 Redis 连接的方式,最常用的是在配置文件中设置。在application.propertiesapplication.yml文件中,配置示例如下:

application.properties;

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.timeout=3000
# 连接池配置(可选)
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms

application.yml;

spring:redis:host: localhostport: 6379password:database: 0timeout: 3000lettuce:pool:max-idle: 8min-idle: 0max-active: 8max-wait: -1ms

配置说明:

  • spring.redis.host:Redis 服务器主机地址;

  • spring.redis.port:Redis 服务器端口号;

  • spring.redis.password:Redis 访问密码;

  • spring.redis.database:使用的 Redis 数据库编号(0 - 15);

  • spring.redis.timeout:连接超时时间;

  • 连接池相关配置(以Lettuce为例):用于控制连接池的大小和行为,提升连接管理效率。

四、编写 Redis 操作代码

1. 创建 Redis 配置类

参考 Spring 官方文档,创建配置类以定制RedisTemplate。以Lettuce客户端为例:


@Configurationpublic class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 键使用String序列化template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());// 值使用JSON序列化template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}

上述代码配置了RedisTemplate,通过合理设置序列化方式,方便对不同类型数据进行存储和读取。

2. 编写 Redis 操作 Service;

封装 Redis 常用操作,方便业务代码调用:

@Servicepublic class RedisService {private final RedisTemplate<String, Object> redisTemplate;public RedisService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}// 存储数据public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 存储数据并设置过期时间public void set(String key, Object value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}// 获取数据public Object get(String key) {return redisTemplate.opsForValue().get(key);}// 删除数据public void delete(String key) {redisTemplate.delete(key);}}

3. 测试 Redis 操作

使用 JUnit 5 编写测试类验证 Redis 操作:

@SpringBootTestpublic class RedisTest {@Autowiredprivate RedisService redisService;@Testpublic void testRedis() {// 存储数据redisService.set("testKey", "testValue");// 获取数据Object value = redisService.get("testKey");System.out.println("获取到的值:" + value);// 删除数据redisService.delete("testKey");Object deletedValue = redisService.get("testKey");System.out.println("删除后获取到的值:" + deletedValue);}
}

运行测试,若控制台输出预期结果,表明 Redis 集成成功。

五、使用 Redis 实现缓存

Spring 官方文档提供了强大的缓存抽象机制,结合 Redis 可轻松实现缓存功能。

1. 启用缓存

在 Spring Boot 主类上添加@EnableCaching注解:

@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2. 编写 Service 方法并添加缓存注解

以用户查询为例:

@Servicepublic class UserService {// 模拟从数据库查询用户public User getUserFromDatabase(String userId) {// 实际查询数据库逻辑return new User(userId, "John Doe");}// 使用@Cacheable缓存方法结果@Cacheable(value = "users", key = "#userId")public User getUser(String userId) {return getUserFromDatabase(userId);}
}

@Cacheable注解会根据valuekey定义的规则,自动管理缓存的读写,当方法再次被调用时,若缓存存在则直接返回缓存数据,提升系统响应速度。

总结

通过以上步骤,依据官方文档完成了 Spring Boot 与 Redis 的集成及缓存实现。实际开发中,还可探索 Redis 的发布订阅、哨兵模式、集群模式等高级功能,进一步挖掘 Redis 潜力。若在实践过程中有疑问,欢迎交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙蜥开发者说:我的龙蜥开源之旅 | 第 32 期

「龙蜥开发者说」第 32 期来了&#xff01;开发者与开源社区相辅相成&#xff0c;相互成就&#xff0c;这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的&#xff0c;我们希望在这里让更多人看见技术的力量。本期故事&#xff0c;我们邀请了龙蜥社区开发者潘珏…

在mac上安装sh脚本文件

要将 jd-gui.sh 脚本转换为在 macOS ARM 系统上带有自定义图标的可点击运行的程序&#xff0c;你可以通过创建一个应用程序包&#xff08;.app&#xff09;来实现。以下是详细步骤&#xff1a; 步骤 1&#xff1a;创建应用程序包目录结构 应用程序包实际上是一个特殊的目录&a…

用bilibili一个讲座视频,生成一本科普书籍

用bilibili一个讲座视频,生成一本科普书籍 一、功能介绍1.1 智能文本处理1.2 知识提炼与结构化1.3 专业知识普及1.4 自动化书籍生成1,5 大规模处理能力二、技术特点三、应用意义3.1 教育领域3.2 研究领域3.3 内容创作3.4 企业应用四、创新价值五、使用场景示例六、操作步骤6.1 …

黑马教程强化day3-1

目录 一、File1.定义&#xff1a;2.创建File类的对象3.File提供的判断文件类型、获取文件信息功能4.File提供的创建的方法5.File类删除文件的功能6.File提供的遍历文件夹的方法代码演示 二、递归&#xff08;了解递归算法&#xff0c;以便实现多级遍历找文件&#xff09;1.定义…

milvus 总结

1. milvus 的默认 admin 角色账号 root 的密码 为 Milvus 2. 最开始使用命令&#xff1a; docker-compose -f milvus-standalone-docker-compose.yml up -d 启动 milvus 后&#xff0c;使用 attu 登录 Milvus 是不需要输入账号/密码的&#xff0c;可以使用如下方式开启 mi…

基于docker技术的单主机环境模拟测试批量客户端

EX. 任务背景 近期接到一个需求是在一个高性能服务器上&#xff0c;模拟启动多个待测试客户端的场景&#xff0c;但这个客户端程序有点特殊&#xff0c;设置了守护模式&#xff0c;并且需要管理员权限会监控系统的/dev/mem节点&#xff0c;单个环境中只能启动一个。 当前的测…

windows上用vnc viewer 能连接mac,不能连ubuntu

如果 VNC Viewer 可以连接 macOS&#xff0c;但无法连接 Ubuntu&#xff0c;通常是由于 Ubuntu 上的 VNC 服务配置问题或网络限制导致的。以下是逐步排查和解决方案&#xff1a; 1. 确认 Ubuntu 上已安装并运行 VNC 服务 (1) 检查是否安装了 VNC 服务器 Ubuntu 常用的 VNC 服…

Electron-vite【实战】MD 编辑器 -- 编辑区(含工具条、自定义右键快捷菜单、快捷键编辑、拖拽打开文件等)

最终效果 页面 src/renderer/src/App.vue <div class"editorPanel"><div class"btnBox"><divv-for"(config, key) in actionDic":key"key"class"btnItem":title"config.label"click"config.a…

没有宝塔面板的服务器上的WordPress网站打包下载到本地?

在服务器上部署的wordpress博客站&#xff0c;没有宝塔面板&#xff0c;怎么将服务器上的wordpress打包下载到本地&#xff1f; 作者: 晓北斗NorSnow 晓北斗动态视觉设计师&#xff0c;岚度视觉工作室执行人&#xff1b;主要从事展厅视频制作、图形工作站销售、AIGC研究&#…

Atcoder Beginner Contest 410 题解报告

零、前言 经过七七四十九天的分别&#xff0c;本期 ABC 题解又和大家见面啦&#xff01; 经过七周的奋勇杀题&#xff0c;我终于达成了三个小心愿&#xff1a; 不吃罚时AK上金排名 100 100 100 以内 且 Rated&#xff08;悲催的是&#xff0c;我 ABC400 排名两位数但没Rate…

pyspark非安装使用graphframes

pyspark版本3.1.3 需要文件 graphframes-0.8.2-spark3.1-s_2.12.jarspark-graphx_2.12-3.1.3.jar从 https://github.com/microsoft/adb2spark/raw/main/graphframes-0.8.2-py3-none-any.whl 下载graphframes-0.8.2-py3-none-any.whl。下载后把whl后缀改成zip&#xff0c;解压…

[Linux入门] Linux磁盘管理与文件系统

目录 Linux磁盘与文件系统管理详解&#xff1a;从基础到实践 ​​一、磁盘基础简述​​ 1️⃣​​硬盘类型​​&#xff1a; ​2️⃣机械硬盘结构​​&#xff1a; 3️⃣​​磁盘容量计算​​&#xff1a; 公式&#xff1a;磁盘容量磁头数柱面数每磁道扇区数每扇区字节数 …

【Flutter】性能优化总结

【Flutter】性能优化总结 Flutter 性能优化是提升应用流畅度、响应速度和用户体验的关键。可以从以下几个方面进行优化&#xff1a; 一、UI 构建与布局优化 1、避免不必要的重建 使用 const 构造函数&#xff1a;如 const Text(Hello)&#xff0c;可以减少 Widget 重建。使用…

5、ZYNQ PL 点灯--流水灯

目录 1、 概述 2 、硬件电路 3、 新建 VIVADO 工程 4、 添加工程文件 6、编写流水灯功能的Verilog代码 7 、添加管脚约束文件 8、 RTL 仿真 8.1 添加仿真测试源码 8.2 仿真结果 9、 编译并且产生 bit 文件 10、 下载程序 11、实验结果 ​编辑12、总结 1、 概述 本…

HTML5 浮动

1. 常见网页布局 1-3-1布局 1-2-1布局 2. 标准文档流 3. display属性⭐ display&#xff1a; block 给span元素设置成block display&#xff1a; inline 给div元素设置成inline display&#xff1a; inline-block 给div和span元素设置为inline-block display&#xff1a; no…

若依使用RedisCache需要注意的事项

存入redis对象的时候会带一个type字段&#xff0c;此处需要注意 存入方&#xff1a; 此处需要注意&#xff0c;存入redis的时候会带一个type&#xff0c;也就是类的路径名 redisCache.setCacheObject(screenPlayQueueName, userDemondDto,userDemondDto.getPlayDuration().in…

【STM32的通用定时器CR1的CKD[1:0]: 时钟分频因子 (Clock division)】

在 STM32 的通用定时器&#xff08;如 TIM2, TIM3, TIM4, TIM5 等&#xff09;中&#xff0c;CR1 (Control Register 1) 寄存器中的 CKD[1:0] (Clock division) 位域是一个与抗干扰和数字滤波相关的设置&#xff0c;它并不直接影响定时器计数器 (CNT) 的计数频率&#xff08;计…

渲染学进阶内容——机械动力的渲染系统(2)

Flywheel代码 这篇来研究一下实例 InstanceHandle 接口深度解析 接口核心作用 InstanceHandle 是 Flywheel 渲染引擎中的 GPU实例句柄 接口,它提供了对底层渲染实例的直接控制能力。这个接口是**实例化渲染(Instanced Rendering)**系统的核心操作接口,与之前讨论的 Vis…

Redis:极速缓存与数据结构存储揭秘

Redis —— 这个强大又灵活的 开源、内存中的数据结构存储系统。它常被用作数据库、缓存、消息代理和流处理引擎。 核心特点 (为什么它这么受欢迎&#xff1f;)&#xff1a; 内存存储 (In-Memory): 数据主要存储在 RAM 中&#xff0c;读写操作直接在内存中进行。核心优势&…

vulnyx Diff3r3ntS3c writeup

信息收集 arp-scan nmap 这里默认的话是只有80端口的&#xff0c;这个22端口是我拿到root后开的 获取userFlag 直接上web看看 扫个目录 把网页拉到最下面可以看到一个文件上传点 我们尝试上传一个php文件 失败了&#xff0c;那xxx呢 上传成功了&#xff0c;看来后端的后缀名…