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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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. 优化性能 七、…

昇思学习打卡-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 …

【每日一练】python类和对象现实举例详细讲解

""" 本节课程目的&#xff1a; 1.掌握类描述现实世界实物思想 2.掌握类和对象的关系 3.理解什么事面向对象 """ #比如设计一个闹钟&#xff0c;在这里就新建一个类 class Clock:idNone #闹钟的序列号&#xff0c;也就是类的属性priceNone #闹…

【开源之美】:WinMerge Files

一、引言 强大的windows端文件比较工具&#xff0c;跟Beyond Compare相比&#xff0c;更为强大。但是这里我们推荐他的原因&#xff0c;不仅是因为作为一个使用的工具&#xff0c;主要是因为他开源&#xff0c;可以通过调试优秀的源代码&#xff0c;进一步的提升C项目设计和编…

Alternative to Receptive field in Transformers and what factors impact it

题意&#xff1a;Transformer中感受野的替代概念及其影响因素 问题背景&#xff1a; I have two transformer networks. One with 3 heads per attention and 15 layers in total and second one with 5 heads per layer and 30 layers in total. Given an arbitrary set of d…

什么是数据模型?数据模型与数据治理有什么关系?

在企业数据治理的广阔领域中&#xff0c;首要且关键的一步是明确沟通数据治理的需求。这包括对企业所持有的数据种类、数据存储位置、以及当前数据管理的具体情况有一个清晰的了解和记录。了解企业的数据资产是制定有效数据治理策略的基础。企业需要识别和盘点所有类型的数据资…

AIGC产品经理学习路径

基础篇&#xff08;课时 2 &#xff09; AIGC 行业视角 AIGC 的行业发展演进&#xff1a;传统模型/深度学习/大模型 AIGC 的产品设计演进&#xff1a;AI Embedded / AI Copilot / AI Agen AIGC 的行业产业全景图 AIGC 的产品应用全景图 AIGC 职业视角 AI 产品经理/ AIGC…

实验9 存储过程与函数的创建管理实验

一、实验目的&#xff1a; 理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。 二、实验内容 1&#xff0e;某超市的食品管理的数据库的Food表&#xff0c;Food表的定义如表所示&#xff0c; Food表的定义…

【进阶篇-Day8:JAVA中递归、异常的介绍】

目录 1、递归的介绍和使用1.1 递归的介绍1.2 案例案例一&#xff1a;案例二&#xff1a;案例三&#xff1a;案例四&#xff1a; 1.3 总结 2、异常的介绍和使用2.1 异常的介绍&#xff1a;&#xff08;1&#xff09;能够看懂异常&#xff08;2&#xff09;异常的体系接口和分类&…

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…