Spring Boot整合Redis的高效数据缓存实践
引言
在现代Web应用开发中,数据缓存是提高系统性能和响应速度的关键。Redis作为一种高性能的缓存和数据存储解决方案,被广泛应用于各种场景。本文将研究如何使用Spring Boot整合Redis,通过这个强大的缓存工具提高应用的性能和可伸缩性。
整合redis,需要先安装redis
Redis
Redis是一款key-value存储结构的内存级NoSQL数据库
- 支持多种数据存储格式
- 支持持久化
- 支持集群
五种数据类型:
- String(字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- zSet(有序集合)
好处
- 缓存加速:Redis是一个高性能的内存数据库,使用它可以将常用的数据缓存在内存中,从而提高系统的读取速度。例如,将数据库查询结果或计算结果缓存到Redis中,下次需要时可以直接从Redis获取,减少对数据库或计算资源的访问。
- 分布式会话管理:在分布式系统中,多个服务实例可能需要共享用户的会话信息。Rdis提供了高效的键值存储和过期时间设置,可以用于实现分布式会话管理。通过将用户的会话数据存储在Redis中,各个服务实例可以无状态地处理请求,提高系统的可扩展性和容错性。
- 队列和消息发布订阅:Redis的发布订阅功能可以用于解耦系统的组件或模块之间的通信。你可以使用Redis的队列功能实现异步任务处理、消息队列等场景。同时,Redis还提供了强大的消息发布订阅机制,可以用于实时推送消息给订阅者。
- 计数器和排行榜:Redis支持原子操作和高并发的特性,非常适合用于实现计数器和排行榜功能。例如,你可以使用Redis的原子操作实现文章或视频的点赞、收富等计数功能,也可以使用有序集合实现排行榜。
- 地理位置和地理搜索:Reds提供了地理位置的存储和查询功能,可以将经纬度坐标存储在Redis中,并支持以半径为条件进行搜索。这在实现地理位置相关的应用如附近的人、附近的商家等方面非常有用。
- 分布式锁和限流:Redis的分布式锁功能可以用于解决分布式系统中的并发访问问题,保证共享资源的正确性。此外,Redis还可以用于实现请求限流,控制系统的访问频率,防止恶意请求或系统过载。
Redis下载( Windows版)
https://github.com/tporadowski/redis/releases
Redis安装与启动( Windows版)
服务端启动命令
redis-server.exe redis.windows.conf
客户端启动命令
redis-cli.exe
步骤一:引入Redis依赖
首先,在Spring Boot项目的pom.xml文件中引入Redis的相关依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
步骤二:配置Redis连接信息
在application.properties或application.yml中配置Redis连接信息:
# Redis配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=your-password # 如果有密码的话
spring.redis.database=0
RedisTemplate相关方法
| 方法 | 说明 |
| redisTemplate.opsForValue() | 操作String |
| redisTemplate.opsForHash() | 操作hash |
| redisTemplate.opsForList() | 操作List |
| redisTemplate.opsForSet() | 操作set |
| redisTemplate.opsForZSet() | 操作有序set |
步骤三:使用RedisTemplate进行数据操作
@SpringBootTest
public class RedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid set() {ValueOperations ops = redisTemplate.opsForValue();ops.set("name","奇遇少年");}
}
问题出现了:当我们使用Redis客户端查看刚刚存入Redis数据库的数据时,结果是这样的:

这是因为在使用默认的对象RedisTemplate时,会把value值序列化为byte类型,所以就出现了上图的结果。
解决方案:
使用StringRedisTemplate
@SpringBootTest(classes = RedisApplication.class)
public class RedisApplicationTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid set() {ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();ops.set("name","奇遇少年");}}
自定义序列化方式
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}

redis客户端选择
springboot整合redis技术提供了多种客户端兼容模式,默认提供的是lettucs客户端技术,也可以根据需要切换成指定客户端技术,例如jedis客户端技术,切换成jedis客户端技术操作步骤如下:
步骤一:引入Redis依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
jedis坐标受springboot管理,无需提供版本号
步骤二:配置客户端技术类型,设置为jedis
spring:redis:host: localhostport: 6379client-type: jedis
步骤二:根据需要设置对应的配置
spring:redis:host: localhostport: 6379client-type: jedislettuce:pool:max-active: 16jedis:pool:max-active: 16
lettcus与jedis区别
- jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响
- lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。 StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作
结语
通过本文的指南,你学到了如何使用Spring Boot整合Redis,从而提高应用的性能和可伸缩性。Redis作为一种高性能的缓存和数据存储解决方案,为应用提供了快速、可靠的数据缓存能力。通过合理配置和使用Redis,你能够优化数据访问,提高系统的响应速度,为用户提供更好的体验。希望这篇博文能够帮助你顺利整合Redis到你的Spring Boot项目中。
相关文章:
Spring Boot整合Redis的高效数据缓存实践
引言 在现代Web应用开发中,数据缓存是提高系统性能和响应速度的关键。Redis作为一种高性能的缓存和数据存储解决方案,被广泛应用于各种场景。本文将研究如何使用Spring Boot整合Redis,通过这个强大的缓存工具提高应用的性能和可伸缩性。 整合…...
FastApi-参数接收的正确使用(2)
前言 本文是该专栏的第2篇,后面会持续分享FastApi以及项目实战的各种干货知识,值得关注。 本文重点介绍,在使用FastApi使用“参数接收”时遇到的三种类型“路径参数”,“查询参数”,“请求体”的相关问题以及相应的解决方案。 具体详细知识点,跟着笔者直接往下看正文。…...
三、需求规格说明书(软件工程示例)
1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.任务概述 2.1目标 2.2运行环境 2.3条件与限制 3.数据描述 3.1静态数据 3.2动态数据 3.3数据库介绍 3.4数据词典 3.5数据采集 4.功能需求 …...
Elasticsearch 查询语句概述
目录 1. Match Query 2. Term Query 3. Terms Query 4. Range Query 5. Bool Query 6. Wildcard Query 7. Fuzzy Query 8. Prefix Query 9. Aggregation Query Elasticsearch 是一个基于 Lucene 的搜索引擎,提供了丰富的查询DSL(Domain Specifi…...
kafka简单介绍和代码示例
“这是一篇理论文章,给大家讲一讲kafka” 简介 在大数据领域开发者常常会听到MQ这个术语,该术语便是消息队列的意思, Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年…...
一次解决ForkJoinPool日志追踪的辛酸经历
本文主要分享了一次解决ForkJoinPool日志追踪的辛酸经历。历时3个月终于找到通用的解决方案,以此文分享给有需要的你。 一、需求背景 1.某日,某同事根据日志ID排查生产环境问题过程中,发现日志不全 2.经排查发现中间有很多线程为ForkJoinP…...
VM使用教程--SDK取图 视频笔记
本笔记均由海康机器人官网的V学院视频中记录所得,属于省流大师了[doge] 图像采集 图像采集包括1图像源,2多图采集,3输出图像,4缓存图像,5光源 1图像源 图像源包括本地图像,相机采图,SDK 本…...
11.spring boot 启动源码(一)
目录 概述SpringApplication静态方法构造方法run 实例方法配置文件Actuator 工作原理*EndpointAutoConfigurationBeansEndpointAutoConfigurationShutdownEndpointAutoConfiguration结束概述 spring boot 版本 2.6.13 spring boot 启动源码(一) 涉及 SpringApplication 中静态…...
【微服务】springcloud集成sleuth与zipkin实现链路追踪
目录 一、前言 二、分布式链路调用问题 三、链路追踪中的几个概念 3.1 什么是链路追踪 3.2 常用的链路追踪技术 3.3 链路追踪的几个术语 3.3.1 span 编辑 3.3.2 trace 3.3.3 Annotation 四、sluth与zipkin概述 4.1 sluth介绍 4.1.1 sluth是什么 4.1.2 sluth核心…...
数学建模-预测人口数据
目录 中国09~18年人口数据 创建时间 绘制时间序列图 使用专家建模器 得到结果 预测结果 残差的白噪声检验 中国09~18年人口数据 创建时间 路径:数据-> 定义日期和时间 绘制时间序列图 使用专家建模器 看看spss最终判断是那个模型最佳的契合 得到结果 预…...
SpringBoot 集成 Canal 基于 MySQL 做数据同步
一、canal 组件关系 下载地址:https://github.com/alibaba/canal/releases/download/canal-1.1.7/ 这里面主要的有两个 canal.deployer-1.1.7.tar.gz 和 canal.adapter-1.1.7.tar.gz,canal.admin-1.1.7.tar.gz 是一个监控服务,可选…...
【CVE-2022-22733漏洞复现】
Apache ShardingSphere ElasticJob-UI漏洞 漏洞编号:CVE-2022-22733 文档说明 本文作者:SwBack 创作时间:2024/1/21 19:19:19 知乎:https://www.zhihu.com/people/back-88-87 CSDN:https://blog.csdn.net/qq_30817059 百度搜索: SwBack漏洞描述 Apache ShardingSphere Elast…...
Python爬虫---scrapy框架---当当网管道封装
项目结构: dang.py文件:自己创建,实现爬虫核心功能的文件 import scrapy from scrapy_dangdang_20240113.items import ScrapyDangdang20240113Itemclass DangSpider(scrapy.Spider):name "dang" # 名字# 如果是多页下载的话, …...
【机器学习】机器学习四大类第01课
一、机器学习四大类 有监督学习 (Supervised Learning) 有监督学习是通过已知的输入-输出对(即标记过的训练数据)来学习函数关系的过程。在训练阶段,模型会根据这些示例调整参数以尽可能准确地预测新的、未见过的数据点的输出。 实例&#x…...
下述默认构造函数有什么问题?
12.4 // points to string allocated by new // holds length of string 独立的、相同的数据,而不会重叠。由于同样的原因,必须定义赋值操作符。对于每一种情况,最终目的 都是执行深度复制,也就是说,复制实际的数据,而不仅仅是复制指向数据的指针。 对象的存储持续性为自动或…...
vite和mockjs配合使用
vite mockjs 当后端还没准备完成之前,前端可以使用 mock 模拟后端响应,提高开发效率 1、安装插件 使用 vite-plugin-mock 插件,配合mockjs完成项目的 mock 配置 npm install mockjs vite-plugin-mock2、vite配置插件 在 vite.config.js…...
【数据结构】常见八大排序算法总结
目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序(非比较排序) 9.补充:基数排序 10.总结…...
系统学英语 — 句法 — 常规句型
目录 文章目录 目录5 大基本句型复合句型主语从句宾语从句表语从句定语从句状语从句同位语从句补语从句 谓语句型 5 大基本句型 主谓:主语发出一个动作,例如:He cried.主谓宾:we study English.主系表:主语具有某些特…...
Github操作网络异常笔记
Github操作网络异常笔记 1. 源由2. 解决2.1 方案一2.2 方案二 3. 总结 1. 源由 开源技术在国内永远是“蛋疼”,这些"政治"问题对于追求技术的我们,形成无法回避的障碍。 $ git pull ssh: connect to host github.com port 22: Connection ti…...
Vue3新特性defineModel()便捷的双向绑定数据
官网介绍 传送门 配置 要求: 版本: vue > 3.4(必须!!!)配置:vite.config.js 使用场景和案例 使用场景:父子组件的数据双向绑定,不用emit和props的繁重代码 具体案例 代码实…...
i.MX6ULL LCD驱动适配实战:从设备树到时序调试全解析
1. 项目概述与核心价值最近在搞一个基于i.MX6ULL的工控HMI项目,屏幕显示是绕不开的一环。市面上很多教程要么只讲Framebuffer应用,要么直接给个现成的设备树文件让你照着改,至于里面的参数怎么来的、屏幕初始化序列怎么配,往往一笔…...
终极音频格式转换指南:FlicFlac让音乐文件兼容性不再是难题!
终极音频格式转换指南:FlicFlac让音乐文件兼容性不再是难题! 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备无法…...
一套代码适配四种屏幕——StyleConfiguration 键盘多设备适配方案
文章目录问题在哪?StyleConfiguration 的设计思路KeyStyle 接口定义StyleConfiguration.getInputStyle 完整逻辑资源文件命名规范组件如何使用 StyleConfiguration屏幕旋转适配完整流程这种设计模式的通用价值踩坑记录写在最后搞输入法开发最头疼的事情之一就是屏幕…...
Windows 和 Ubuntu 安装 OpenClaw 全攻略
文章目录【开场白】【先说结论:Windows 用户推荐走 WSL2】【Windows 安装:4 步搞定】第 1 步:装 WSL2第 2 步:更新系统第 3 步:一键装 OpenClaw第 4 步:初始化配置【WSL2 必做配置:让 OpenClaw …...
TVA智能体范式的工业视觉革命(2)
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
SEM教程丨如何用“场景词”突围,月揽165个询盘?
很多工业设备老板觉得SEM就是“谁出价高谁就赢”,结果往往是钱烧了一大堆,机器没卖出去几台。今天我们要复盘的是某食品安检设备公司的实操案例,看看它是如何摆脱“无效烧钱”,稳稳拿下月均165个精准咨询的 🍎。 一、 …...
RISC-V开发板免费申请与实战指南:从环境搭建到项目移植
1. 项目概述:一次难得的RISC-V生态深度体验机会最近在开发者圈子里,一个消息引起了不小的讨论:可以免费申请到基于RISC-V架构的生态开发板。这对于我们这些常年和ARM、x86打交道的开发者来说,无疑是一个极具吸引力的“尝鲜”机会。…...
无王无帝定乾坤,来自田间第一人:大道同源归本心
无王无帝定乾坤,来自田间第一人。 世间千般法理,万般修行,流派纷杂,说辞各异; 世人终日寻道问路,遍历山河苦思真谛, 却往往舍近求远,向外求索不休, 反倒遗忘最本真的根源…...
不用示波器也能调:在Vivado/Quartus里用时序约束搞定RGMII接口的建立保持时间
不依赖示波器的RGMII时序优化:FPGA工具链实战指南 当千兆以太网接口出现数据丢包或误码时,多数工程师的第一反应是抓起示波器测量信号完整性。但在实际项目周期中,硬件调试设备可能无法随时调用,而PCB设计又已成定局。此时&#x…...
2026年主流行工具有何不同?subAgent是趋势还是营销?深度解析!
AI Coding工具中的“subAgent”正从营销词发展为工程抽象,实现上下文、权限、任务和执行的拆分管理。主流工具如Claude Code、Codex、OpenClaw、Gemini CLI均在强化subAgent能力,但设计哲学各异。文章从技术视角解析subAgent的本质、各工具异同及使用选择…...
