如何使用Spring Boot框架整合Redis:超详细案例教程
目录
# 为什么选择Spring Boot与Redis整合?
1. 更新 pom.xml
2. 配置application.yml
3. 创建 Redis 配置类
4. Redis 操作类
5. 创建控制器
6. 启动应用程序
7. 测试
# 为什么选择Spring Boot与Redis整合?
将Spring Boot与Redis整合可以充分利用两者的优势,简化开发并提升应用性能。具体好处包括:
- 缓存支持:使用Redis作为缓存层可以极大提高应用的响应速度和可扩展性。
- 会话管理:将用户会话存储在Redis中,可以实现分布式会话管理。
- 数据持久性:Redis的持久化功能可以确保数据的可靠性。
- 简化配置:Spring Boot的自动配置和Redis Starter可以简化配置工作。
了解了这些基础知识后,接下来将详细介绍如何在Spring Boot项目中整合Redis,包括依赖配置、连接设置、基本操作和应用案例。
1. 更新 pom.xml
确保你的项目包含了以下依赖。如果使用 Spring Initializr 已经添加了 spring-boot-starter-data-redis,这里就无需再次添加。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>
</dependencies>
commons-pool2 是用于 Lettuce 连接池配置的依赖。
2. 配置application.yml
补充:
Spring Boot 1.x 和 Spring Boot 2.x 中,
spring.redis.host用于配置 Redis 连接属性。Spring Boot 3.x 中,
spring.redis.host已经弃用。从 Spring Boot 2.x 开始,引入了
spring.data.redis作为配置 Redis 连接的方式,并且在 Spring Boot 3.x 中也可以使用spring.data.redis进行配置。
在 src/main/resources 目录下,添加 Redis 连接池的配置。
application.yml:
server:port: 8080spring:redis:host: 127.0.0.1 # 地址port: 6379 # 端口号database: 0 # 数据库索引(默认为0)timeout: 1800000 # 连接超时时间(毫秒)lettuce:pool:max-active: 20 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1 # 最大阻塞等待时间(负数表示没有限制)max-idle: 5 # 连接池中最大空闲连接min-idle: 0 # 连接池中最小空闲连接
3. 创建 Redis 配置类
在 com.lei.my_redis.config 包中创建或更新 RedisConfig 类,使用连接池配置 LettuceConnectionFactory。
package com.lei.my_redis.config;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@EnableCaching // 开启缓存
@Configuration // 配置类
public class RedisConfig extends CachingConfigurerSupport {/*** 配置 Redis 连接工厂* 意义: LettuceConnectionFactory 是连接 Redis 服务器的入口,它使用了 Lettuce 客户端,并且配置了连接池来提高性能和资源管理* @return LettuceConnectionFactory*/@Beanpublic LettuceConnectionFactory redisConnectionFactory() {// 配置 Redis 服务器的连接信息RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setHostName("localhost");redisStandaloneConfiguration.setPort(6379);// redisStandaloneConfiguration.setPassword("password"); // 取消注释以设置密码// 配置连接池GenericObjectPoolConfig<Object> poolConfig = new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(10); // 连接池中的最大连接数poolConfig.setMaxIdle(5); // 连接池中的最大空闲连接数poolConfig.setMinIdle(1); // 连接池中的最小空闲连接数poolConfig.setMaxWaitMillis(2000); // 连接池获取连接的最大等待时间// 创建一个带有连接池配置的 Lettuce 客户端配置LettucePoolingClientConfiguration lettucePoolingClientConfiguration =LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();// 返回带有连接池配置的 Redis 连接工厂return new LettuceConnectionFactory(redisStandaloneConfiguration, lettucePoolingClientConfiguration);}/*** 配置并返回一个 RedisTemplate 实例,用于执行 Redis 操作* 意义: RedisTemplate 提供了一种高级抽象,使得开发者可以通过模板方法操作 Redis,而无需直接处理底层的 Redis 命令。* 它支持多种 Redis 操作,例如值操作、哈希操作、列表操作等* @return RedisTemplate*/@Beanpublic RedisTemplate<String, Object> redisTemplate() {/*1.创建 RedisTemplate: 这是 Spring 用于与 Redis 交互的核心类,简化了与 Redis 的交互。2.设置连接工厂: 使用前面定义的 LettuceConnectionFactory。3.设置序列化器: 设置键和值的序列化器,这里使用 StringRedisSerializer 来将键和值序列化为字符串。*/RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory()); // 设置连接工厂template.setKeySerializer(new StringRedisSerializer()); // 设置键的序列化器template.setValueSerializer(new StringRedisSerializer()); // 设置值的序列化器return template;}
}
4. Redis 操作类
保持 Redis 操作类和控制器不变。它们已经实现了基本的 Redis 操作。这里只需更新 RedisService 类以支持连接池即可。
package com.lei.my_redis.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;/*** RedisService 类提供了简化的 Redis 操作接口,用于在 Spring Boot 应用中存储和检索数据。* 它通过 RedisTemplate 与 Redis 服务器交互,执行常见的操作如设置值、获取值、设置值带过期时间和删除值。*/
@Service
public class RedisService {/*意义: RedisTemplate 是 Spring 提供的一个 Redis 操作模板,它抽象了 Redis 的底层访问,使开发者可以用 Java 对象操作 Redis。使用 @Autowired 注解,Spring 自动将配置好的 RedisTemplate 注入到 RedisService 类中*/@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 作用: 向 Redis 中存储一个键值对public void setValue(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 作用: 从 Redis 中获取指定键的值public Object getValue(String key) {return redisTemplate.opsForValue().get(key);}// 作用: 向 Redis 中存储一个键值对,并设置其过期时间// timeout 指定时间量,timeUnit 指定时间单位public void setValueWithExpiry(String key, Object value, long timeout, TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}// 作用: 从 Redis 中删除指定键及其对应的值public void deleteValue(String key) {redisTemplate.delete(key);}
}
5. 创建控制器
RedisController 类的实现保持不变。
package com.lei.my_redis.controller;import com.lei.my_redis.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** RedisController 是一个 REST 控制器类,用于处理客户端发来的 HTTP 请求,并通过调用 RedisService* 执行 Redis 数据操作。它提供了三个 API 端点:设置值、获取值和删除值* RestController注解作用: 表示这个类是一个 RESTful 控制器,它的所有方法的返回值都会直接作为 HTTP 响应体返回。* RestController注解意义: 结合 @Controller 和 @ResponseBody 的功能,简化了返回 JSON 格式数据的开发工作。*/
@RestController
public class RedisController {@Autowiredprivate RedisService redisService;/*** 作用: 处理 HTTP POST 请求,设置 Redis 中的键值对* 1.使用 @RequestParam 注解获取请求参数 key 和 value* 2.调用 redisService.setValue(key, value) 方法,将 key 和 value 存储到 Redis 中* 3.返回一个简单的字符串 "Value set" 作为响应* 请求:POST /set?key=myKey&value=myValue* 响应:"Value set"* RequestParam注解:获取请求参数: 它从 HTTP 请求中获取参数,并将这些参数绑定到控制器方法的参数上*/
// @PostMapping("/set")@GetMapping("/set")public String setValue(@RequestParam String key, @RequestParam String value) {redisService.setValue(key, value);return "Value:(" + key + ") set";}/*** 作用: 处理 HTTP GET 请求,从 Redis 中获取指定键的值* 1.使用 @RequestParam 注解获取请求参数 key* 2.调用 redisService.getValue(key) 方法,从 Redis 中获取 key 对应的值,并将结果转换为 String 类型* 3.返回获取的值* 请求:GET /get?key=myKey* 响应:"myValue" // Redis 中对应 `myKey` 的值*/@GetMapping("/get")public String getValue(@RequestParam String key) {return (String) redisService.getValue(key);}/*** 作用: 处理 HTTP POST 请求,删除 Redis 中指定键的值* 1.使用 @RequestParam 注解获取请求参数 key* 2.调用 redisService.deleteValue(key) 方法,从 Redis 中删除 key 对应的键值对* 3.返回一个简单的字符串 "Value deleted" 作为响应* 请求:POST /delete?key=myKey* 响应:"Value deleted"*/
// @PostMapping("/delete")@GetMapping("/delete")public String deleteValue(@RequestParam String key) {redisService.deleteValue(key);return "Value:(" + key + ") deleted";}
}
6. 启动应用程序
SpringBootRedisApplication 主类保持不变。
package com.lei.my_redis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyRedisApplication {public static void main(String[] args) {SpringApplication.run(MyRedisApplication.class, args);}}
7. 测试
启动应用程序后,可以选中通过 Postman 或浏览器访问以下 URL,验证 Redis 操作是否成功。
- 设置值:
POST http://localhost:8080/set?key=mykey&value=myvalue - 获取值:
GET http://localhost:8080/get?key=mykey - 删除值:
POST http://localhost:8080/delete?key=mykey
案例1:设置值

案例2:获取值

案例3:删除值


成功在 Spring Boot 项目中整合了 Redis 并配置了连接池。我们使用连接池可以显著提高 Redis 操作的性能和资源管理效率。
相关文章:
如何使用Spring Boot框架整合Redis:超详细案例教程
目录 # 为什么选择Spring Boot与Redis整合? 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合? 将Spring Boot与Redis整合可以充分利…...
算法--贪心
贪心 原理经典例题[860. 柠檬水找零](https://leetcode.cn/problems/lemonade-change/description/)[2208. 将数组和减半的最少操作次数](https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/)[179. 最大数](https://leetcode.cn/problems/large…...
线程控制(创建、终止、等待、分离)
目录 1.前言 2.创建线程 pthread_create函数 3.线程终止 pthread_exit函数 pthread_cancel函数 4.线程等待 5.线程分离 1.前言 在Linux系统中,并不存在真正的线程,只有轻量级进程。所以,Linux系统只提供了操作轻量级进程的系统调用…...
【备份】php项目处理跨域请求踩坑
这都是老生常谈的东西了。我还在踩坑,记录一下。 我在项目入口明明写了如下代码: // 处理预检请求 (OPTIONS) if ($_SERVER[REQUEST_METHOD] OPTIONS) {header("Access-Control-Allow-Origin: https://xxx.vip");header("Access-Cont…...
目标检测YOLO实战应用案例100讲-面向无人机图像的小目标检测
目录 知识储备 YOLO v8无人机拍摄视角小目标检测 数据集结构 环境部署说明 安装依赖 模型训练权重和指标可视化展示 训练 YOLOv8 PyQt5 GUI 开发 主窗口代码 main_window.py 使用说明 无人机目标跟踪 一、目标跟踪的基本原理 二、常用的目标跟踪算法 基于YOLOv…...
实现 Leaflet 多类型点位标记与聚合功能的实战经验分享
在现代的地理信息系统(GIS)应用中,地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施,地图都能以直观的方式呈现数据。然而,当数据量较大时,地图上可能会出现大量的标记点&#x…...
Linux 环境“从零”部署 MongoDB 6.0:mongosh 安装与数据操作全攻略
前提 完成linux平台部署MongoDB【部署教程】且完成mongosh的安装 由于本人使用的是6.0版本的MongoDB,新版本 MongoDB(尤其是 6.0 及以上版本)已经不再默认捆绑传统的 mongo shell,而改用新的 MongoDB Shell(mongosh&am…...
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
# 深度学习五虎将:当CNN遇见Transformer的奇幻漂流 ## 序章:AI江湖的兵器谱排行 2012年,多伦多大学的厨房里,Hinton的学生们用GPU煎了个"AlexNet"荷包蛋,从此开启了深度学习的热兵器时代。如今五大模型各显…...
004 rocketmq集群
1、集群模式 在RocketMQ中,集群的部署模式是比较多的,有以下几种: public class ConsumerDemo {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer new DefaultMQPushConsumer("test-group&qu…...
基于 Python 深度学习的电影评论情感分析可视化系统(2.0 全新升级)
基于 Python 深度学习的电影评论情感分析可视化系统,基于 Flask 深度学习,构建了一个 影评情感分析系统,能够 自动分析影评、计算情感趋势 并 可视化展示,对于电影行业具有重要参考价值! 基于 Python 深度学习的电影评…...
Linux内核配置与构建原理
Kconfig文件 Kconfig是Linux内核中用于配置功能的脚本语言系统,由众多内核源码树中每个目录下的Kconfig文件组成。它定义Linux相关的配置选项层次结构和依赖关系。 menuconfig工具,会抓取Kconfig中的信息,为用户输出友好的交互式菜单选项配…...
大语言模型微调的基本概念介绍
大型语言模型(LLMs)正在以惊人的速度发展,LLM微调的潜力更是如此。大型语言模型的生命周期有几个关键步骤,今天我们将要介绍这个周期中最丰富、最耗时的一部分——LLM微调过程。 大语言模型的生命周期 在深入了解大型语言模型&a…...
实例分割 | yolov11训练自己的数据集
前言 因工作要求使用的都是yolov5系列的模型,今天学习一下最先进的yolov11,记录一下环境配置及训练过程。 1.项目下载及环境安装 源码位置:yolov11 可以看到,这里要求python版本大于等于3.8,我这里安装python3.10.…...
vue3:四嵌套路由的实现
一、前言 1、嵌套路由的含义 嵌套路由的核心思想是:在某个路由的组件内部,可以定义子路由,这些子路由会渲染在父路由组件的特定位置(通常是 <router-view> 标签所在的位置)。通过嵌套路由,你可以实…...
AIGC和搜索引擎的异同
AIGC(生成式人工智能)与搜索引擎的核心差异体现在信息处理方式和输出形态上,我们可以从以下维度对比: 一、工作原理的本质差异 信息检索机制 搜索引擎:基于关键词匹配(如"中暑怎么办"→返回相关…...
ES批量查询
在 Elasticsearch 中,multi_search(也称为 msearch)是一种允许你在单个请求中执行多个搜索操作的 API。它可以显著减少网络开销,尤其是在需要执行多个查询时。multi_search 会将多个查询打包成一个请求发送给 Elasticsearch&#…...
Vue2学习
一、Vue3 基础 监视属性 天气案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>天气案例</…...
PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单
在 PySide中,contextMenuEvent() 是 QWidget 类(以及继承自它的所有子类)的一个事件处理方法,主要用于处理上下文菜单事件,也就是当用户在控件上右键点击时触发的事件。 • 通过重新定义contextMenuEvent()来实现自定…...
Storm实时流式计算系统(全解)——下
storm编程案例-网站访问来源实时统计-需求 storm编程-网站访问来源实时统计-代码实现 根据以上条件可以只写一个类,我们只需要写2个方法和一个main(),一个读取/发射(spout)。 一个拿到数据统计后发到redis…...
配置Nginx日志url encode问题
文章目录 配置Nginx日志url encode问题方法1-lua方法2-set-misc-nginx-module 配置Nginx日志url encode问题 问题描述: 当自定义日志输出格式,需要输出http请求中url参数时,如果参数中包含中文,是会进行url encode的,…...
数采网关的应用与特点
摘要在工业自动化、智能制造和物联网(IoT)快速发展的背景下,数据采集网关(数采网关)作为连接现场设备与上层管理系统的关键枢纽,发挥着至关重要的作用。它能够实现工业设备数据的实时采集、协议转换、边缘计…...
计算机毕业设计 | SpringBoot+vue医院药品管理系统(附源码+论文)
1,绪论 1.1课题背景 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化。目前,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到提升,而读书就是人们…...
GitHub 被黑或因员工安装 Nx Console 恶意扩展引发,更多详情待调查
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士专栏供应链安全数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的…...
xc-union 从 1.0.0 到 2.0.0:开源私域返利基座
618 拼的不只是流量,更是开发效率。 每到大促节点,很多团队都会集中遇到同一类需求: 查券/导购工具要尽快上线H5 页面先跑,后端接口后续持续扩展要求可快速交付,也要支持后续二开 问题是,如果从零开始手撸&…...
Unity Low Poly动物资源包:性能优化与开箱即用实践指南
1. 这个Low Poly Animated Animals资源包到底解决了什么问题?在Unity项目开发中,尤其是独立游戏、教育模拟、原型验证或轻量级AR应用里,我见过太多团队卡在“生态感”这个看似简单实则棘手的环节上。不是没有动物模型——恰恰相反,…...
JMeter接口测试实战:从登录闭环到分布式压测
1. 为什么接口测试不能只靠“点点点”——从一个被忽略的500错误说起我第一次在客户现场接手一个电商后台系统时,开发说“所有接口都测过了,Postman跑了一遍,没问题”。上线前夜,支付回调接口突然返回500,日志里只有一…...
YCWebView架构设计与源码解析:面向对象设计思想与模块化实现
YCWebView架构设计与源码解析:面向对象设计思想与模块化实现 【免费下载链接】YCWebView 基于腾讯x5开源库,提高webView开发效率,大概要节约你百分之六十的时间成本。该案例支持处理js的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异…...
软考高项案例分析9:项目采购管理
软考高项案例分析9:项目采购管理 一、项目采购管理过程 1、规划采购管理; 2、实施采购管理; 3、控制采购; 二、案例分析知识点 1. 采购管理的过程及定义作用 规划采购管理:是记录项目采购决策、明确采购方法,及识别潜在卖方的过程。作用:确定是否从项目外部获取货物…...
NVIDIA突破:单显卡实现图片驱动720p长视频世界模型生成能力提升
这项由NVIDIA研究团队主导的研究成果于2026年5月以预印本形式发布,论文编号为arXiv:2605.15178,感兴趣的读者可通过该编号查阅完整原文。给你一张照片,再给你一条摄像机的移动路线,然后电脑自动生成一段完整的一分钟高清视频&…...
BilibiliDown音频提取终极指南:3分钟学会从B站视频提取高质量音乐
BilibiliDown音频提取终极指南:3分钟学会从B站视频提取高质量音乐 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/g…...
