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.mzph.cn/news/103648.shtml

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

相关文章

下载安装Ipa Guard

下载安装Ipa Guard 可以前往ipaguard工具官网下载&#xff0c;工具是免费下载&#xff0c;免费体验使用的。下载地址是https://www.ipaguard.com。 下载后解压工具便ok了&#xff0c;工具是绿色软件&#xff0c;无需其他安装流程。双击Ipa Guard.exe 启动ipaguard。 ipaguard…

Java语法基础案例(二)

目录 案例六&#xff1a;抢红包 案例七&#xff1a;找素数 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 案例八&#xff1a;实现双色球 关于本项目所用所有方法的解释&#xff1a; 案例六&#xff1a;抢红包 一个大V直播时发起了抢红包活动&#xff0c;分…

2023年中国固废处理行业研究报告

第一章 行业概况 1.1 定义 固体废物处理是一个日益重要的领域&#xff0c;随着中国城市化进程的加速和工业产值的持续增长&#xff0c;固体废物的产生量也在不断上升。根据《固体废物污染环境防治法》的定义&#xff0c;固体废物包括了人类在生产、生活和其他活动中产生的固态…

AI低代码维格云甘特视图怎么用?

甘特视图,以日期为横轴展示任务持续时长和先后顺序,简称甘特图。 项目管理过程中,合理分配任务和资源至关重要,使用甘特图,妥当解决以下场景: 想知道整个项目的周期多长,哪些任务对项目的周期影响最大; 想知道每个任务的时间有多长,任务的优先级和依赖关系是什么; 想…

基于深度学习的“语义通信编解码技术”框架分类

目录 基于神经网络的语义提取基于神经网络的语义信源编码基于神经网络的语义信源信道联合编码基于神经网络的语义编码与数字调制联合设计参考文献 基于神经网络的语义提取 在现有的信源编码前端加上一个语义提取神经网络[53] &#xff0c;如图所示。语义提取神经网络的输入是原…

接口自动化测试框架搭建【附教程加源码】

1 接口测试 接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说&#xff0c;属于更底层的测试&#xff0c;这样带来的好处就是测试收益更大&#xff…

【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet

一、说明 在这篇文章中&#xff0c;我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计&#xff0c;并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述&#xff1a; 理论…

OpenCV实现答题卡自动打分!

目录 1&#xff0c;主要原理以及函数介绍 全部代码&#xff0c;以 2 &#xff0c; 实现过程 3&#xff0c;结果展示 1&#xff0c;主要原理以及函数介绍 ap argparse.ArgumentParser() 创建一个ArgumentParser对象&#xff0c;并将其赋值给变量ap。这个对象可以接受我们的脚…

gitbook使用

文章目录 前言一、安裝Node.js&#xff1a;二、安裝GitBook&#xff1a;編輯和創建內容&#xff1a;安装typora 前言 ubuntu20.04系统 一、安裝Node.js&#xff1a; 打開終端機&#xff08;Terminal&#xff09;。 使用以下命令來安裝Node.js和npm&#xff08;Node.js的包管…

Vulnhub系列靶机---Raven: 2

文章目录 信息收集主机发现端口扫描目录扫描用户枚举 漏洞发现漏洞利用UDF脚本MySQL提权SUID提权 靶机文档&#xff1a;Raven: 2 下载地址&#xff1a;Download (Mirror) 信息收集 靶机MAC地址&#xff1a;00:0C:29:15:7F:17 主机发现 sudo nmap -sn 192.168.8.0/24sudo arp…

攻防世界题目练习——Web引导模式(二)

题目目录 1. Web_php_unserialize2. supersqli3. web24. NewsCenter5. Web_python_template_injection6. catcat-new 1. Web_php_unserialize 题目源码&#xff1a; <?php class Demo { private $file index.php;public function __construct($file) { $this->file …

FPGA project : flash_read

实验目标&#xff1a; flash的普通读指令&#xff0c;在指定地址开始读。可以更改地址与读的数据个数。 先发送读指令扇区地址页地址字节地址。 然后读数据。再把读到的串行数据转化为8bit的数据&#xff0c;存入fifo。 然后读出FIFO中数据&#xff0c;通过uart_tx模块发送…

Redis分布式锁最牛逼的实现(Java 版,最牛逼的实现方式)

写在前面的话 分布式锁一般有三种实现方式&#xff1a;1. 数据库乐观锁&#xff1b;2. 基于Redis的分布式锁&#xff1b;3. 基于ZooKeeper的分布式锁。 本篇博客将介绍第二种方式&#xff0c;基于Redis实现分布式锁。 为什么需要分布式锁&#xff1f; 在单机环境下编写多线…

【使用 TensorFlow 2】03/3 创建自定义损失函数

一、说明 TensorFlow 2发布已经接近5年时间&#xff0c;不仅继承了Keras快速上手和易于使用的特性&#xff0c;同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则&#xff1a;简化概念&#xff0c;海纳百川&#xff0c;构建生态.这是本系列的第三部分&#xff0c;…

Python数据挖掘项目实战——自动售货机销售数据分析

摘要&#xff1a;本案例将主要结合自动售货机的实际情况&#xff0c;对销售的历史数据进行处理&#xff0c;利用pyecharts库、Matplotlib库进行可视化分析&#xff0c;并对未来4周商品的销售额进行预测&#xff0c;从而为企业制定相应的自动售货机市场需求分析及销售建议提供参…

2、vscode c++ 项目配置调试及运行

文章目录 1、项目布局2、多项目管理2.1 先是一个总的CMakeLists.txt2.2 每个项目2.3 多版本OPENCV 3、调试和运行 接上一篇文章&#xff0c;vscode和cmake的c环境配置好以后&#xff0c;我们要写项目&#xff0c;再写对应的CMakeLists.txt 1、项目布局 . ├── bin ├── bu…

jmeter实现webservice接口测试

其实可以用jmeter两种sampler进行webservice的测试&#xff1a; 1、SOAP/XML-RPC Request(但是在jmeter3.2以后版本中已经取消了这个取样器) 2、HTTP请求 下面分别介绍两种方式 一、首先需要使用soupUI工具抓取webservice接口的部分需要的信息。 1、新建项目 2、新建成功的…

怎么修改linux的root@后面的名称

文章目录 场景.登录服务器,root后面的名称是随机的,想自定义名称建议,直接使用命令执行需要重启机子 场景.登录服务器,root后面的名称是随机的,想自定义名称 建议,直接使用命令执行 hostnamectl set-hostname rdd-test重新连接即可生效,实际也是修改了/etc/hostname名称 需要…

十三、前端开发知识快速入门

目录 一、HTML概述和基本结构1.1 概述1.2 基本结构1.3 html文档类型1.4 html注释 二、HTML常用标签2.1 块标签2.2 行内标签2.3 字符实体2.4 图片标签2.5 链接标签2.6 列表标签2.7 表单2.8 表格 三、页面布局四、CSS样式4.1 基本语法和页面引用4.2 文本样式设置4.3 颜色表示法4.…

中国陆地生态系统服务价值空间分布数据集

简介&#xff1a; 中国陆地生态系统服务价值空间分布产品是以全国陆地生态系统类型遥感分类为基础&#xff0c;生态系统类型包括&#xff1a;旱地、农田、针叶林、针阔混交林、阔叶林、灌木林、草原、灌草丛、草甸、湿地、荒漠、裸地、水系、冰川积雪、人工表面&#xff08;包…