SpringBoot新手快速入门系列教程7:基于Redis的一个简单存取数据的例子

我的教程都是亲自测试可行才发布的,如果有任何问题欢迎留言或者来群里我每天都会解答。

新手可能有这样的疑问,有了数据库的存取方式,我们为什么还要使用Redis这种缓存数据库读取方式呢?

原因主要有以下几点:

1. 性能提升

数据库查询尤其是复杂查询可能会消耗大量的时间和资源。而Redis是一个内存数据库,读写速度非常快,可以大幅度提高应用的响应速度。通过缓存热点数据,可以减少对数据库的直接访问,从而降低数据库的负载。

2. 减少数据库负载

对于高并发的应用,频繁的数据库查询可能会导致数据库负载过高,甚至出现性能瓶颈。通过使用Redis缓存,可以将部分读请求转移到缓存中,从而减轻数据库的压力,提高整体系统的稳定性。

3. 提高数据读取速度

Redis基于内存的特性使得数据读取速度非常快,远远超过磁盘读取速度。对于一些经常被访问的数据,将其存储在Redis中可以显著提升访问速度,从而改善用户体验。

4. 支持复杂数据结构

Redis支持丰富的数据结构,如字符串、哈希、列表、集合、有序集合等,可以方便地实现各种复杂的缓存需求。比如,你可以使用Redis的哈希来存储用户信息,使用有序集合来实现排行榜等功能。

5. 可靠的持久化选项

尽管Redis是内存数据库,但它提供了多种持久化选项(如RDB快照和AOF日志),可以在一定程度上保证数据的持久性,避免数据丢失。

如果您对IDAE编辑器或者mysql的基础知识不慎熟悉,可以移步来到我之前的教程快速预览一下基础的用法,可以保证你能顺利的看下去下面的教程

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API-CSDN博客

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。-CSDN博客

1,下载安装Redis

(1)在选择Redis的版本时,通常建议使用最新的稳定版(stable version),因为它包含了最新的功能和修复,并经过了广泛的测试。

https://github.com/microsoftarchive/redis/releases

(2)运行Redis服务器

双击运行server

(3)测试连接

另开一个命令提示符窗口,进入解压后的目录,运行redis-cli.exe,然后输入PING命令来测试连接:

2,创建项目

我们新建一个‘HelloRedis’项目

你需要添加以下依赖项:

  1. Spring Web(用于创建Web应用程序和RESTful服务)
  2. Spring Data Reactive Redis(用于与Redis进行交互)

 

3,项目结构

我们需要创建config、controller两个package

同时创建RedisConfig、ReactiveController两个类

解释

  • RedisConfig.java

    • 这是一个配置类,用于创建和配置 ReactiveRedisTemplate
    • ReactiveRedisTemplate 是用于与 Redis 进行异步和非阻塞交互的模板类。
    • RedisSerializationContext 配置了键和值的序列化方式,使用 StringRedisSerializer 来将键和值序列化为字符串。
  • ReactiveUserController.java

    • 这是一个 REST 控制器类,包含两个端点 /register/login
    • /register 端点接收用户名参数,将用户名存储到 Redis 中,并返回注册成功的信息。
    • /login 端点接收用户名参数,检查用户名是否存在于 Redis 中,存在则返回登录成功的信息,不存在则返回未注册的信息。

4,代码展示

1,RedisConfig

package com.yuye.www.helloredis.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;@Configuration // 标注这是一个配置类
public class RedisConfig {// 定义一个Bean,用于配置ReactiveRedisTemplate@Beanpublic ReactiveRedisTemplate<String, String> reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {// 创建一个Redis序列化上下文,使用StringRedisSerializer来序列化键和值RedisSerializationContext<String, String> context = RedisSerializationContext.<String, String>newSerializationContext(new StringRedisSerializer()).hashKey(new StringRedisSerializer()) // 设置哈希键的序列化方式.hashValue(new StringRedisSerializer()) // 设置哈希值的序列化方式.build();// 创建并返回ReactiveRedisTemplate实例return new ReactiveRedisTemplate<>(factory, context);}
}

2,ReactiveController

package com.yuye.www.helloredis.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;@RestController // 标注这是一个REST控制器
public class ReactiveUserController {@Autowired // 自动注入ReactiveRedisTemplateprivate ReactiveRedisTemplate<String, String> reactiveRedisTemplate;/*** 处理用户注册请求* @param name 用户名* @return 注册结果*/@GetMapping("/register")public Mono<String> register(@RequestParam String name) {// 使用ReactiveRedisTemplate将用户名存入Redisreturn reactiveRedisTemplate.opsForValue().set(name, "registered").thenReturn("User " + name + " registered successfully"); // 注册成功后返回结果}/*** 处理用户登录请求* @param name 用户名* @return 登录结果*/@GetMapping("/login")public Mono<String> login(@RequestParam String name) {// 使用ReactiveRedisTemplate检查用户名是否存在return reactiveRedisTemplate.hasKey(name).flatMap(isRegistered -> {if (isRegistered) {return Mono.just("User " + name + " is logged in"); // 用户存在,返回登录成功信息} else {return Mono.just("User " + name + " is not registered"); // 用户不存在,返回未注册信息}});}
}

3,application.properties

spring.application.name=HelloRedis
spring.data.redis.host=localhost
spring.data.redis.port=6379server.port=8081

5, 启动测试项目

(1)保存

http://localhost:8081/register?name=yourName

(2)读取

http://localhost:8081/login?name=yourName

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

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

相关文章

力扣题解(单词拆分)

139. 单词拆分单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 思路&#xff1a; 规定dp[i]…

亚马逊中小型店铺如何开店?

对于想要在亚马逊平台上开设店铺的中小型卖家来说&#xff0c;这是一个非常值得关注的话题。作为亚马逊上的一个重要参与者&#xff0c;中小型店铺有着广阔的发展空间和无限的可能性&#xff0c;但也由于成本预算与规模限制&#xff0c;无法与大型店铺的策略相提并论&#xff0…

字符串模板被噶了,JDK 23 删除了预览功能“字符串模板”

之前出了一个视频&#xff0c;介绍 JDK 23 中的新特性。之后我才发现&#xff0c;在 JDK 21 和 22 中的预览功能“字符串模板&#xff08;String Templates&#xff09;”&#xff0c;在 JDK 23 中已经没有了。字符串模板的相关代码&#xff0c;已经被全部删除了。 字符串模板的…

Spring Boot 3.3 【二】Spring Boot自动配置机制深度解析

简单动作&#xff0c;深刻联结。在这技术海洋&#xff0c;我备好舟&#xff0c;等你扬帆。启航吧&#xff01; &#x1f31f;点击【关注】&#xff0c;解锁定期的技术惊喜&#xff0c;让灵感与知识的源泉不断涌动。 &#x1f44d;一个【点赞】&#xff0c;如同心照不宣的默契&a…

Unity免费领场景多人实时协作地编2人版局域网和LAN联机类似谷歌文档协同合作搭建场景同步资产设置编辑付费版支持10人甚至更多20240709

大家有没有用过谷歌文档、石墨文档、飞书文档等等之类的协同工具呢&#xff1f; Blender也有类似多人联机建模的插件&#xff0c; Unity也有类似的多人合作搭建场景的插件啦。 刚找到一款免费插件&#xff0c;可以支持2人局域网和LAN联机地编。 付费的版本支持组建更大的团队。…

详解如何通过稀疏向量优化信息检索

在信息检索方法的发展历程中&#xff0c;我们见证了从传统的统计关键词匹配到如 BERT 这样的深度学习模型的转变。虽然传统方法提供了坚实的基础&#xff0c;但往往难以精准捕捉文本的语义关系。如 BERT 这样的稠密检索方法通过利用高维向量捕获文本的上下文语义&#xff0c;为…

烟雾识别技术在火灾预防中的应用:思通数科大模型的力量

引言 火灾是导致生命财产损失的重大灾害之一。早期检测和快速响应是预防火灾和减少损失的关键。结合思通数科大模型的烟雾识别技术&#xff0c;为实时检测和精确定位烟雾来源提供了一种高效的解决方案。本文将探讨这一技术如何有效预防火灾并保障人员安全。 烟雾识别技术概述 …

注册自定义总线

1、在/sys/bus下注册一个自定义总线 #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h> #include<linux/kobject.h> #include<linux/slab.h> #include<linux/sysfs.h> #include<linux/device.h> #include…

bug修复 修复修复修复

好的&#xff0c;这里是更新后的代码&#xff0c;将所有 inRange 函数的第一个变量替换为 ZoomOutimage&#xff1a; // 绿色分岔路 if (divergerColor "green" && nextColor "null") {cv::Mat frameGreen, frameRed;frame2.copyTo(frameGreen)…

如何在 Fedora 中使用 `shred` 擦除驱动器或文件

English Version: https://blog.csdn.net/sch0120/article/details/140390161 如何在 Fedora 中使用 shred 擦除驱动器或文件 安全擦除驱动器对于保护您的敏感数据免受未授权访问至关重要。在这篇博文中&#xff0c;我们将学习如何在 Fedora 中使用 shred 命令安全擦除整个驱…

FATE Flow 源码解析 - 作业提交处理流程

背景介绍 FATE 是隐私计算中最有名的开源项目了&#xff0c;从 star 的数量上来看也可以看出来。截止 2023 年 3 月共收获 4.9k 个 star&#xff0c;但是 FATE 一直被认为代码框架复杂&#xff0c;难以理解&#xff0c;作为一个相关的从业者&#xff0c;后续会持续对 FATE 项目…

React@16.x(56)Redux@4.x(5)- 实现 createStore

目录 1&#xff0c;分析2&#xff0c;实现2.1&#xff0c;基础实现2.2&#xff0c;优化2.2.1&#xff0c;随机字符串2.2.2&#xff0c;action 的判断2.2.2&#xff0c;监听器的优化 2.3&#xff0c;最终形态 1&#xff0c;分析 createStore()&#xff0c;参数1为 reducer&…

0601STM32TIM

TOC 分为四部分&#xff0c;八小节 一部分&#xff1a;主要讲定时器基本定时的功能&#xff0c;也就是定一个事件&#xff0c;让定时器每隔这个时间产生一个中断&#xff0c;来实现每隔一个固定时间来执行一段程序的目的&#xff0c;比如做一个时钟、秒表&#xff0c;或者使用一…

【Linux】1w详解如何实现一个简单的shell

目录 实现思路 1. 交互 获取命令行 2. 子串分割 解析命令行 3. 指令的判断 内建命令 4. 普通命令的执行 补充&#xff1a;vim 文本替换 整体代码 重点思考 1.getenv和putenv是什么意思 2.代码extern char **environ; 3.内建命令是什么 4.lastcode WEXITSTATUS(sta…

Java-final关键字详解

Java-final关键字详解 一、引言 二、什么是 final 关键字&#xff1f; 三、final 变量 final 局部变量 final 实例变量 final 静态变量 四、final 方法 五、final 类 六、final 关键字的实际应用 1. 定义常量 2. 防止方法被重写 3. 创建不可变类 4. 优化性能 七、…

切割01串(牛客小白月赛98)

题意&#xff1a; 给三个整数n&#xff0c;l&#xff0c;r&#xff0c;和一个字符串s&#xff0c;满足l<|c0-c1|<r就可以切成字符串a和字符串b&#xff0c;c0为字符串a左侧出现0的次数&#xff0c;c1为字符串b右侧出现1的次数&#xff0c;求最多切割次数 知识点&#x…

Onnx 1-深度学习-概述1

Onnx 1-深度学习-概述1 一: Onnx 概念1> Onnx 介绍2> Onnx 的作用3> Onnx 应用场景4> Onnx 文件格式1. Protobuf 特点2. onnx.proto3协议3> Onnx 模型基本操作二:Onnx API1> 算子详解2> Onnx 算子介绍三: Onnx 模型1> Onnx 函数功能

昇思学习打卡-8-计算机视觉/FCN图像语义分割

目录 FCN介绍FCN所用的技术训练数据的可视化模型训练模型推理FCN的优点和不足优点不足 FCN介绍 FCN主要用于图像分割领域&#xff0c;是一种端到端的分割方法&#xff0c;是深度学习应用在图像语义分割的开山之作。通过进行像素级的预测直接得出与原图大小相等的label map。因…

【C++基础】初识C++(2)--引用、const、inline、nullptr

目录 一、引用 1.1 引用的概念和定义 1.2 引用的特性 1.3引用的使用 1.4 const引用 1.5 指针和引用的关系 二、inline 三、nullptr 一、引用 1.1 引用的概念和定义 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名&#xff0c;编译器不会为引⽤…

微软的人工智能语音生成器在测试中达到与人类同等水平

微软公司开发了一种新的神经编解码语言模型 Vall-E&#xff0c;在自然度、语音鲁棒性和说话者相似性方面都超越了以前的成果。它是同类产品中第一个在两个流行基准测试中达到人类同等水平的产品&#xff0c;而且显然非常逼真&#xff0c;以至于微软不打算向公众开放。 VALL-E …