Spring Boot 中的 Redis 数据操作配置和使用
Spring Boot 中的 Redis 数据操作配置和使用
Redis(Remote Dictionary Server)是一种高性能的开源内存数据库,用于缓存、消息队列、会话管理和数据存储。在Spring Boot应用程序中,Redis被广泛用于各种用例,包括缓存、持久性存储和分布式锁。本文将探讨如何在Spring Boot中配置和使用Redis,包括数据操作和常见用例。

配置 Spring Boot 项目以使用 Redis
要在Spring Boot项目中使用Redis,首先需要添加相关依赖和配置。以下是在pom.xml中添加Redis依赖项的示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Boot的spring-boot-starter-data-redis依赖项将自动包含所需的Redis客户端库(通常是Lettuce或Jedis)和其他必要的依赖项。您还需要配置Redis连接信息。在application.properties或application.yml中添加以下配置:
spring.redis.host=127.0.0.1 # Redis 服务器地址
spring.redis.port=6379 # Redis 服务器端口
这些配置将告诉Spring Boot应用程序如何连接到Redis服务器。根据您的环境,您可能需要添加其他配置,如认证信息或SSL支持。
使用 Spring Boot 进行 Redis 数据操作
一旦配置了Spring Boot项目以使用Redis,您可以开始使用Redis进行数据操作。Spring Boot提供了方便的注解驱动的方式来执行各种Redis操作,包括存储、检索、删除和过期设置。
存储数据
要将数据存储到Redis中,您可以使用@Service或@Repository注解将一个类声明为Spring组件,并使用@Autowired注解注入StringRedisTemplate或RedisTemplate bean。以下是一个示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisDataService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void saveData(String key, String value) {stringRedisTemplate.opsForValue().set(key, value);}
}
在上述示例中,我们注入了StringRedisTemplate,并使用opsForValue().set()方法将键值对存储到Redis中。
检索数据
要检索存储在Redis中的数据,您可以使用opsForValue().get()方法。以下是一个示例:
public String getData(String key) {return stringRedisTemplate.opsForValue().get(key);
}
删除数据
要删除Redis中的数据,您可以使用delete()方法。以下是一个示例:
public void deleteData(String key) {stringRedisTemplate.delete(key);
}
设置过期时间
您还可以为存储在Redis中的数据设置过期时间,以便自动清理不再需要的数据。以下是一个示例:
public void saveDataWithTTL(String key, String value, long timeoutInSeconds) {stringRedisTemplate.opsForValue().set(key, value, timeoutInSeconds, TimeUnit.SECONDS);
}
在上述示例中,timeoutInSeconds参数表示数据的过期时间(以秒为单位)。
Redis 哨兵和集群配置
在生产环境中,通常会使用Redis Sentinel(哨兵)或Redis Cluster来提高Redis的可用性和性能。Spring Boot提供了配置选项来支持这些部署模式。
使用 Redis Sentinel
要配置Spring Boot项目以使用Redis Sentinel,您需要在application.properties或application.yml中添加以下配置:
spring.redis.sentinel.master=my-master # 哨兵主节点名称
spring.redis.sentinel.nodes=host1:port1,host2:port2,host3:port3 # 哨兵节点列表
这些配置将告诉Spring Boot如何连接到Redis Sentinel,并自动发现主节点和从节点。
使用 Redis Cluster
要配置Spring Boot项目以使用Redis Cluster,您需要在application.properties或application.yml中添加以下配置:
spring.redis.cluster.nodes=host1:port1,host2:port2,host3:port3 # Redis Cluster 节点列表
这些配置将告诉Spring Boot如何连接到Redis Cluster。
使用 Spring Boot 进行常见 Redis 用例
除了基本的存储、检索、删除和过期设置之外,Redis还支持各种高级用例,如缓存、计数、发布/订阅、分布式锁等。以下是一些常见的Redis用例和Spring Boot的实现示例。
使用 Redis 进行缓存
Spring Boot提供了内置的缓存支持,可以轻松集成Redis作为缓存提供程序。要启用缓存支持,只需在Spring Boot应用程序的配置类上添加@EnableCaching注解,并在application.properties或application.yml中配置Redis连接信息。以下是一个示例:
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableCaching
public class CacheConfig {// ...
}
在application.properties或application.yml中添加Redis配置:
spring.cache.type=redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
然后,您可以在需要缓存的方法上使用@Cacheable注解
:
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class CachedDataService {@Cacheable("myCache")public String getCachedData(String key) {// 如果数据未缓存,将执行下面的方法并将结果存储到缓存return fetchDataFromDataSource(key);}private String fetchDataFromDataSource(String key) {// 从数据源获取数据return "Data for " + key;}
}
使用 Redis 进行计数
Redis是一个出色的计数器存储介质。您可以使用opsForValue().increment()方法递增或递减计数器的值。以下是一个示例:
public long incrementCounter(String key) {return stringRedisTemplate.opsForValue().increment(key);
}
使用 Redis 发布/订阅
Redis支持发布/订阅模式,允许多个订阅者订阅特定的频道,以接收发布者发布的消息。Spring Boot通过StringRedisTemplate提供了简单的发布/订阅功能。以下是一个示例:
public void publishMessage(String channel, String message) {stringRedisTemplate.convertAndSend(channel, message);
}
使用 Redis 进行分布式锁
分布式锁是在分布式系统中确保资源互斥访问的一种常见机制。Spring Boot提供了使用Redis实现分布式锁的功能。以下是一个示例:
public boolean acquireLock(String lockKey, String clientId, long expirationTime) {Boolean lockAcquired = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, clientId, expirationTime, TimeUnit.MILLISECONDS);return lockAcquired != null && lockAcquired;
}
总结
Redis是一种功能强大的内存数据库,广泛用于Spring Boot应用程序中的各种用例。通过添加spring-boot-starter-data-redis依赖项,配置Redis连接信息,以及使用StringRedisTemplate或RedisTemplate进行数据操作,您可以轻松地将Redis集成到您的应用程序中。
本文介绍了如何配置Spring Boot项目以使用Redis,执行基本的数据操作,以及如何应对常见的Redis用例,包括缓存、计数、发布/订阅和分布式锁。希望这篇文章对您有所帮助,让您更好地理解如何在Spring Boot中配置和使用Redis来实现各种功能。
相关文章:
Spring Boot 中的 Redis 数据操作配置和使用
Spring Boot 中的 Redis 数据操作配置和使用 Redis(Remote Dictionary Server)是一种高性能的开源内存数据库,用于缓存、消息队列、会话管理和数据存储。在Spring Boot应用程序中,Redis被广泛用于各种用例,包括缓存、…...
rust宏
宏看起来和函数很像,只不过名称末尾有一个感叹号 ! 。 宏并不产生函数调用,而是展开成源码,并和程序的其余部分一起被编译。 Rust宏和C不同,Rust的宏会展开为抽象语法树(AST,abstract syntax treeÿ…...
性能测试之性能测试指标详解
前言 刚开始,以为做性能测试,就是做些脚本、参数化、关联,压起来之后,再扔出一个结果。 但实际上不止这些内容,还要加上性能分析,关注调优之后响应时间有多大的提升,TPS 有多大的提高…...
CustomNavBar 自定义导航栏视图
1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…...
canal rocketmq
上篇文章canal 消费进度说到直接使用ClusterCanalConnector并发消费是有问题的,可以先用单点将canal事件发送到mq中,再由mq并发处理,另外mq还可以做到削峰的作用,让canal数据不至于阻塞。 使用队列,可以自己起一个单实…...
【数据库系统概论】第九章关系查询处理何查询优化
9.1查询处理 一:查询处理步骤 关系数据库管理系统查询处理可以分为4个阶段: 查询分析查询检查查询优化查询执行 (1)查询分析 任务:对查询语句进行扫描,分析词法、语法是否符合SQL语法规则 如果没有语…...
bp盐丘模型波场数值模拟matlab
波场数值模拟是地震勘探和地震学研究中常用的工具,而BP(Backpropagation)盐丘模型是一种用于地下介质成像的方法。如果您想在MATLAB中进行波场数值模拟,并结合BP盐丘模型进行地下成像,可以按照以下步骤进行:…...
结构体对齐规则
1.第一个成员在结构体变量偏移量为0的地址处。 2.其他成员变量对齐到某个数字(对齐数)的整数倍的地址处。(对齐数编译器默认的一个对齐数与该成员大小的较小值)注意:目前有且只有VS编译器有默认为8. 3.结构体总大小为最大对齐数的整数倍。 4.如果嵌套…...
css 如何让元素内部文本和外部文本 一块显示省略号
实际上还是有这样的需求的 <div class"container"><span>啊啊啊啊啊啊啊啊</span>你好啊撒撒啊撒撒撒撒啊撒撒撒撒撒说</div>还是有这样的需求的哦。 div.container {width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow:…...
SQL语句-中级
一、Mysql软件使用 1.启动/停止Mysql服务器 任务管理器 cmd命令:以管理员的身份打开cmd命令行 net start mysql80//开启net stop mysql80//停止 2.连接与断开Mysql服务器 注意要在bin目录下执行:-u用户名root,-p密码 mysql -u root -p 可能出现的…...
巧用h2-database.jar连接数据库
文章目录 一 、概述二、实践三、解决办法 一 、概述 H2 Database是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式&#…...
136.只出现一次的数字
136. 只出现一次的数字 - 力扣(LeetCode) 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且…...
mysql中遇到查询字段的别名与函数冲突问题
比如以下哎,我查询城市行业数量排名 select City, DENSE_RANK() over(ORDER BY COUNT(Id) DESC) rank, COUNT(Id) num,IndustrySubGroupName from base_companyinfo WHERE IndustrySubGroupName工业机器人 GROUP BY City 上面使用 DENSE_RANK() 函数来计算排名&am…...
直播获奖
题目描述 NOI2130 即将举行。为了增加观赏性, CCF 决定逐一评出每个选手的成 绩,并直播即时的获奖分数线。本次竞赛的获奖率为 𝑤% ,即当前排名前 𝑤% 的选手的最低成绩就是即时的分数线。 更具体地,…...
选择适合自身业务的HTTP代理有哪些因素决定?
相信对很多爬虫工作者和数据采集的企业来说,如何选购适合自己业务的HTTP代理是一个特别特别困扰的选题,市面上那么多HTTP代理厂商,好像这家有这些缺点,转头又看到另外一家的缺点,要找一家心仪的仿佛大海捞针。今天我们…...
1.3 do...while实现1+...100 for实现1+...100
思路:两个变量,一个变量存储数据之和,一个变量实现自增就行 do...while int i, s;i 1;s 0;do{s 1;i;} while (i < 100);cout << s << endl; for int i, j0;for (i 1; i < 100; i){j 1;}cout << j << …...
react数据管理之setState与Props
react数据管理之setState与Props setState调用原理 setState 是 React 中用于更新组件状态(state)的方法。它的调用原理可以分为以下几个步骤: 状态的改变:当调用 setState 时,React 会将新的状态对象与当前状态对象…...
如何保护我们的网络安全
保护网络安全是至关重要的,尤其是在今天的数字化时代。以下是一些保护网络安全的基本步骤: 1、使用强密码:使用包含字母、数字和特殊字符的复杂密码。不要在多个网站上重复使用相同的密码。定期更改密码。 2、启用双因素认证 (2FA)ÿ…...
springboot 制造装备物联及生产管理ERP系统
springboot 制造装备物联及生产管理ERP系统 liu1113625581...
Google zxing 生成带logo的二维码图片
环境准备 开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2 开发工具 IntelliJ IDEAsmartGitNavicat15 添加maven配置 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version> </…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
