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.propertiesapplication.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注解注入StringRedisTemplateRedisTemplate 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.propertiesapplication.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.propertiesapplication.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.propertiesapplication.yml中配置Redis连接信息。以下是一个示例:

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableCaching
public class CacheConfig {// ...
}

application.propertiesapplication.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连接信息,以及使用StringRedisTemplateRedisTemplate进行数据操作,您可以轻松地将Redis集成到您的应用程序中。

本文介绍了如何配置Spring Boot项目以使用Redis,执行基本的数据操作,以及如何应对常见的Redis用例,包括缓存、计数、发布/订阅和分布式锁。希望这篇文章对您有所帮助,让您更好地理解如何在Spring Boot中配置和使用Redis来实现各种功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/156902.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-35-04】学号+姓名+班级(中3班)学号字帖(A4竖版2份 竖版长条)

图片展示: 背景需求: 2022年9-2023年1月我去过小3班带班&#xff0c;但是没有在这个班级投放过学具&#xff0c;本周五是我在本学期第一次带中3班&#xff0c;所以提供了一套学号描字帖。先让我把孩子的名字和脸混个眼熟。 之前试过一页两套名字的纸张切割方法有&#xff1a;…

distcc分布式编译

distcc https://gitee.com/bison-fork/distcc.git 下载工具链 mingw&#xff0c;https://www.mingw-w64.org/downloads/#w64devkitperl&#xff0c;https://strawberryperl.com/releases.html免安装zip版本&#xff0c;autoconf等脚本依赖perlautoconf、automake&#xff0c…

只有正规才有机会,CTF/AWD竞赛标准参考书来了

目录 前言 一、内容简介 二、读者对象 三、目录 前言 随着网络安全问题日益凸显&#xff0c;国家对网络安全人才的需求持续增长&#xff0c;其中&#xff0c;网络安全竞赛在国家以及企业的人才培养和选拔中扮演着至关重要的角色。 在数字化时代&#xff0c;企业为了应对日益…

Flutter:open_file打开本地文件报错问题

相关插件及版本&#xff1a; open_file: ^3.2.1 问题&#xff1a; 项目中一直用的这个插件&#xff0c;突然发现在安卓高版本不能正常使用&#xff0c;报权限问题permissionDenied&#xff0c;断点调试提示相关权限是MANAGE_EXTERNAL_STORAGE&#xff0c;申请权限之后还是不行&…

springboot集成kafka

1、引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.6</version></dependency> 2、配置 server:port: 9099 spring:kafka:bootstrap-servers: 192.1…

JWT - 令牌认证授权(认证流程、认证原理、Jwt 工具类)

目录 一、JWT 认证 1.1、对 JWT 的认识 1.1.1、JWT 解释 1.1.2、为什么使用的 JWT 认证&#xff0c;而不是 Session 认证&#xff1f; a&#xff09;基于传统的 Session 认证 1.1.3、JWT 认证流程 1.1.4、优势 1.1.5、JWT 的结构 JWT 第一部分&#xff1a;标头 Header …

LeetCode - 318 最大单词长度乘积(Java JS Py C)

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 318. 最大单词长度乘积 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串数组 words &#xff0c;找出并返回 length(words[i]) * length(words[j]) 的最大值&#xff0c;并且这两个单词…

RocketMQ核心编程模型以及生产环境最佳实践

文章目录 一、深入理解RocketMQ的消息模型二、消息确认机制消息生产端采用消息确认加多次重试的机制保证消息正常发送到RocketMQ消息消费者端采用状态确认机制保证消费者一定能正常处理对应的消息消费者也可以自行指定起始消费位点 三、广播消息四、顺序消息机制五、延迟消息六…

【Mybatis】动态 SQL

动态 SQL \<if>标签\<trim>标签\<where>标签\<set>标签\<foreach>标签 动态 sql 是 Mybatis 的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 <if>标签 前端用户输入时有些选项是非必填的, 那么此时传到后端的参数是不确…

ipad手写笔哪个好用?苹果平替笔性价比高的

如果你想要入手一款和iPad匹配的电容笔&#xff0c;想必你的第一想法就是苹果的原装电容笔。然而这款电容笔虽然很好用&#xff0c;但价格会相对的昂贵一些。而平替电容笔&#xff0c;却是一种不错的选择&#xff0c;而且价格也很合理。一支普通的平板电容笔&#xff0c;其售价…

设计模式学习(十二)用设计模式干掉 if-else,太优雅了!

目录 一、场景举例二、什么时候需要改造 if-else&#xff1f;三、策略模式 Map字典3.1 策略接口3.2 策略实现类3.3 策略工厂类&#xff08;策略接口的持有者&#xff09;3.4 客户端&#xff08;测试类&#xff09;3.5 执行结果3.6 总结 四、责任链模式4.1 责任链处理接口4.2 责…

使用【Blob、Base64】两种方式显示【文本、图片、视频】 使用 video 组件播放视频

Blob 显示 Blob 对象的类型是由 MIME 类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;来确定的。MIME 类型是一种标准&#xff0c;用于表示文档、图像、音频、视频等多媒体文件的类型。以下是一些常见的 Blob 对象类型&#xff1a; text/plain&#xff1…

2024届通信工程保研经验分享(预推免入营即offer)

2024届通信工程保研经验分享&#xff08;预推免入营即offer&#xff09; BackGround夏令营情况&#xff1a;预推免情况&#xff1a; BackGround 本科院校&#xff1a;末九 专业&#xff1a;通信工程 rank&#xff1a;3/123&#xff08;预推免绩点排名&#xff09;&#xff0…

基于行波理论的输电线路防雷保护

摘要 随着科技的发展&#xff0c;电力已成为最重要的资源之一&#xff0c;如何保证电力的供应对于国民经济发展和人民生活水平的提高都有非常重要的意义。输电线路的防雷保护就是重点之一。架空输电线路分布很广&#xff0c;地处旷野&#xff0c;易遗受雷击&#xff0c;线路的雷…

Apache Ranger:(二)对Hive集成简单使用

1.Ranger Hive-plugin安装 进入 Ranger 编译生成的目录下 找到 ranger-2.0.0-hive-plugin.tar.gz 进行解压 tar -zxvf ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ 2.修改配置文件 vim install.properties #策略管理器的url地址 POLICY_MGR_URLhttp://[ip]:6080#组件…

Ubuntu 22.04.3 LTS单机私有化部署sealos

推荐使用奇数台 Master 节点和若干 Node 节点操作系统 :Ubuntu 22.04 LTS内核版本 :5.4 及以上配置推荐 :CPU 4 核 , 内存 8GB, 存储空间 100GB 以上最小配置 :CPU 2 核 , 内存 4GB, 存储空间 60GB 这里采用的Ubuntu 22.04.3 LTS 版本&#xff0c;Ubuntu 20.04.4 LTS这个版本…

铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)

视频以及图片修复技术是一项具有挑战性的AI视觉任务&#xff0c;它涉及在视频或者图片序列中填补缺失或损坏的区域&#xff0c;同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来&#xff0c;两种突出的方案在视频修复中崭露头角&…

【案例讲解】LVGL关于旋转的配置

更多源码分析请访问:LVGL 源码分析大全 目录 1、前言2、问题原因3、修改方案3.1 直接修改代码3.2 修改配置3.3 降低 LV_DISP_ROT_MAX_BUF 值1、前言 在实现项目中,因为横竖屏的关系,需要对其做90度的旋转。配置旋转时发现一些局部刷新控件,旋转后效果不对。 异常图标正常…

finalshell连接虚拟机中的ubuntu

finalshell下载地址: https://www.finalshell.org/ubuntu设置root密码&#xff1a; sudo passwd rootubuntu关闭防火墙&#xff1a; sudo ufw disable安装ssh # sudo apt update #更新数据(可以不执行) # sudo apt upgrade #更新软件(可以不执行) sudo apt install open…

ACDSee Photo Studio Ultimate 2024特别版(图片编辑器)

ACDSee Photo Studio Ultimate 2024是一款功能全面、易于使用的图像编辑和管理软件&#xff0c;为摄影师和设计师提供了强大的工具和功能。无论您是进行基本的图像优化还是进行复杂的创作&#xff0c;ACDSee Photo Studio Ultimate 2024都将成为您的得力助手。 软件下载&#x…