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> </…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
