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> </…...
汉语到底比其他语言强在哪?
汉语到底比其他语言强在哪?只要一提起这个话题,弹幕里肯定有朋友要说了:哎呀,英语才是世界语言,汉语不严谨,语言没有高下之分,禁止拉踩。这种论调咱们听了一百年了,甚至不少自己人都…...
OpenClaw对话增强:nanobot镜像的聊天历史持久化方案
OpenClaw对话增强:nanobot镜像的聊天历史持久化方案 1. 为什么需要对话持久化 作为一个长期使用OpenClaw进行自动化任务的开发者,我经常遇到这样的困扰:当需要执行一个跨越数小时甚至数天的长周期任务时,传统的短对话模式会导致…...
The Leather Archive应用案例:从赛博都市到极简主义的皮衣穿搭
The Leather Archive应用案例:从赛博都市到极简主义的皮衣穿搭 1. 项目概述 「The Leather Archive」是一个基于AI技术的高端皮衣穿搭生成系统,它巧妙融合了Anything V5基础模型与Stable Yogi皮衣系列LoRA的专业能力。与传统AI工具不同,该项…...
17:L关注AI伦理:蓝队的道德防御
作者: HOS(安全风信子) 日期: 2026-03-17 主要来源平台: GitHub 摘要: 当基拉开始利用AI的伦理漏洞时,传统的安全防御已无法应对。L将AI伦理原则融入安全防御,构建符合道德规范的安全体系。本文拆解L如何在…...
Meixiong Niannian与SpringBoot微服务架构
Meixiong Niannian与SpringBoot微服务架构 1. 引言 在当今快速发展的AI应用领域,如何将强大的画图引擎无缝集成到企业级系统中是一个关键挑战。Meixiong Niannian作为一款高性能的AI画图引擎,能够生成高质量的图像内容,而SpringBoot微服务架…...
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建 1. 项目背景与需求 高校招生简章通常包含大量专业条款和政策说明,每年都会收到大量考生关于条款理解的咨询。传统的人工解答方式存在几个痛点: 效率低下&am…...
VRM-Addon-for-Blender:虚拟角色创作全流程指南
VRM-Addon-for-Blender:虚拟角色创作全流程指南 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 or later 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM-Addon-for-Blender是一款…...
Chainlit前端定制化|通义千问1.5-1.8B-GPTQ-Int4私有化部署与UI二次开发教程
Chainlit前端定制化|通义千问1.5-1.8B-GPTQ-Int4私有化部署与UI二次开发教程 你是不是已经体验过各种在线大模型,但总感觉有些限制?比如数据隐私的担忧、网络延迟的困扰,或者想打造一个完全属于自己的、界面更符合业务需求的AI助…...
C1——优化3Dtiles透明度设置以实现管线可视化
1. 为什么需要调整3Dtiles透明度? 在地理信息系统(GIS)和三维可视化项目中,我们经常会遇到多层数据叠加显示的需求。比如在城市地下管线可视化场景中,地表建筑模型(3Dtiles)和地下管线网络需要同…...
告别拉伸变形!保姆级教程:为你的Unity Windows应用添加自定义窗口比例限制器
Unity Windows应用窗口比例锁定全攻略:从原理到避坑指南 你是否遇到过这样的尴尬场景——精心设计的UI在用户随意拉伸窗口后变得面目全非?作为Unity开发者,我们常常需要为Windows平台构建专业级应用,而窗口比例控制正是提升用户体…...
