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

news2024/9/21 2:38:37

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

新手可能有这样的疑问,有了数据库的存取方式,我们为什么还要使用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
    @Bean
    public 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 // 自动注入ReactiveRedisTemplate
    private ReactiveRedisTemplate<String, String> reactiveRedisTemplate;

    /**
     * 处理用户注册请求
     * @param name 用户名
     * @return 注册结果
     */
    @GetMapping("/register")
    public Mono<String> register(@RequestParam String name) {
        // 使用ReactiveRedisTemplate将用户名存入Redis
        return 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=6379

server.port=8081

5, 启动测试项目

(1)保存

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

(2)读取

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

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

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

相关文章

本地部署,MODNet 背景去除大模型

目录 摘要 引言 MODNet 架构 关键组件 技术原理 本地部署 运行结果 结论 GitHub - ZHKKKe/MODNet: A Trimap-Free Portrait Matting Solution in Real Time [AAAI 2022]A Trimap-Free Portrait Matting Solution in Real Time [AAAI 2022] - ZHKKKe/MODNethttps://gith…

在Linux上导出NFS共享---网络文件系统

目录 一、NFS介绍 二、NFS 所需要的服务 三、搭建NFS服务器共享文件到客户端 在虚拟机129上配置&#xff1a; 在虚拟机135上配置 测试 四、autofs自动挂载 1、安装软件启动 2、编写 /etc/auto.master,在里面添加内容如下 3、编写 /etc/auto.nfs&#xff0c;其内容如下 …

怎么提高音频的播放速度?可以提高音频播放速度的四种方法推荐

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是一种有效的策略&#xff0c;可以显著节省时间和提升信息获取的效率。随着信息量不断增加和学习需求的多样化&#xff0c;快速播放音频已成为许多人在日常生活和工作中的常见做法。这种方法不仅可以用于提高学习效率&…

基于 JSP 的网络招标系统设计与实现

点击下载源码 基于jsp的网上招标系统设计与实现 摘要 从本世纪初&#xff0c;互联网开始加速发展&#xff0c;各种创新型应用和互联网新概念不断出现&#xff0c;例如搜索引擎、电子商务、博客、维基百科、RSS、3G、web2.0、长尾理论等。这些应用和概念与知识管理都有着或多或少…

视频融合共享平台视频共享融合赋能平台数字化升级医疗体系

在当前&#xff0c;医疗健康直接关系到国计民生&#xff0c;然而&#xff0c;由于医疗水平和资源分布不均&#xff0c;以及信息系统老化等问题&#xff0c;整体医疗服务能力和水平的提升受到了限制。视频融合云平台作为数字医疗发展的关键推动力量&#xff0c;在医疗领域的广泛…

Qt:19.浮动窗口/子窗口(子窗口介绍、代码方式创建子窗口、设置子窗口标题、为子窗口添加控件、设置子窗口停靠位置)

目录 1.子窗口介绍&#xff1a; 2.代码方式创建子窗口&#xff1a; 3.设置子窗口标题&#xff1a; 4.为子窗口添加控件&#xff1a; 5.设置子窗口停靠位置。 1.子窗口介绍&#xff1a; 在 Qt 中&#xff0c;可以创建和管理子窗口&#xff08;子窗口体&#xff09;以实现多窗…

pandas个性化求和及报错处理

报错内容&#xff1a; ValueError: (Lengths must match to compare, (19,), (1,)) 案例&#xff0c;自定义数据集&#xff0c;并求每个顾问有成单日的近三天累计成交金额&#xff0c;如下&#xff1a; 求近3天累计成交额&#xff1a; import pandas as pd from datetime im…

跟着李沐学AI:Softmax回归

回归 vs 分类 回归用于估计一个连续值 分类用于预测一个离散类别 两个经典的数据集&#xff1a; MNIST数据集&#xff1a; MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是一个广泛应用于机器学习和深度学习领域的手写数字…

【计算机组成原理 | 第二篇】计算机硬件架构的发展

目录 前言&#xff1a; 冯诺依曼计算机架构 现代计算机架构&#xff1a; 总结&#xff1a; 前言&#xff1a; 在当今数字化时代&#xff0c;计算机硬件不仅是技术进步的见证者&#xff0c;更是推动这一进步的基石。它们构成了我们日常生活中不可或缺的数字生态系统的核心&a…

基于FPGA的图像边缘检测(OV5640)

一、简介 1.应用范围 边缘主要存在于图像中目标与目标之间&#xff0c;目标与背景之间&#xff0c;区域与区域之间。 边缘检测的目的就是找到图像中亮度变化剧烈的像素点构成的集合&#xff0c;表现出来往往是轮廓。如果图像中边缘能够精确的测量和定位&#xff0c;那么&…

<数据集>水稻叶片病害识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1448张 标注数量(xml文件个数)&#xff1a;1448 标注数量(txt文件个数)&#xff1a;1448 标注类别数&#xff1a;3 标注类别名称&#xff1a;[BrownSpot,RiceBlast,BacterialBlight] 序号类别名称图片数框数1Rice…

Python类与对象02:继承

1、什么是继承 上一节中我们介绍了类与对象的用法。类可以看作是一种程序内的设计图纸&#xff0c;而对象则是基于这个图纸制造出来的实体。这个过程类似于现实中的设计表格和填写表格。 现在假设你是一名设计师&#xff0c;需要迭代一款新产品。你有两个选择&#xff1a; 在…

MySQL 数据库(基础)- SQL

SQL通用语法 SQL通用语法 SQL语句可以单行或者多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。 注意&#xff1a;空格和缩进的个数是没有限制的&#xff0c;可以是 “一个” 也可以是 “多个”。MySQL数据库的SQL语句不区分大小写&#xff0c;…

【Django项目】基于Python+Django+MySQL的音乐网站系统项目

功能介绍 首页&#xff1a;歌曲分类、歌曲搜索、热门歌曲、热门下载、新歌推荐 歌曲排行&#xff1a;歌曲分类、分页功能 用户板块&#xff1a;用户登陆/注册、播放历史 歌曲详情&#xff1a;歌曲播放、当前播放列表、歌曲点评、歌曲播放插件、下载歌曲 系统后台&#xff1a;歌…

MacOS 通过Docker安装宝塔面板搭建PHP开发环境

1、docker拉取ubuntu系统 docker pull ubuntu2、运行容器 docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -p 3306:3306 -p 6379:6379 --privilegedtrue -v /Users/oi/Sites:/www/wwwroot ubuntu-v 后的 /Users/oi/Sites 代表…

redis redisson(仅供自己参考)

redis 通过setnx实现的分布式锁有问题 如图&#xff1a; 解决的新的工具为&#xff08;闪亮登场&#xff09;&#xff1a;redisson redisson可重入锁的原理 实现语言lua&#xff1a; 加锁实现脚本语言&#xff1a; 释放锁的脚本语言&#xff1a; 加锁的lua -- 首先判断这个锁…

Ubuntu安装MATLAB

一、准备工作 下载MATLAB安装文件&#xff1a; 访问MathWorks官方网站&#xff08;MathWorks官网&#xff09;&#xff0c;下载适用于Linux的MATLAB安装文件。这通常是一个.iso镜像文件或.zip压缩文件。请注意选择与Ubuntu版本相匹配的MATLAB版本。创建安装目录&#xff1a; 打…

VMware安装Ubuntu以及利用vscode远程Ubuntu

一、VMware安装Ubuntu &#xff08;1&#xff09;VMware安装Ubuntu主要参考此文VMware虚拟机安装Ubuntu22.04图文教程&#xff08;超详细&#xff01;&#xff01;&#xff01;&#xff09;。 &#xff08;2&#xff09;VMware密钥参考此文24年VMware 17密钥(附下载链接&#…

01. 数组篇(进行中......)

一. 前缀和技巧 &#xff08;1&#xff09;前缀和 前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。 class NumArray { public:vector<int> preSum; //前缀和数组NumArray(vector<int>& nums) {//preSum[0] 0&#xff0c;便于计算累加和preSum…

解决QT creator中文乱码问题

1.首先设置文本编辑器为UTF-8 先在工具-选项-文本编辑器-behavior部分选择文件编码为UTF-8&#xff0c;紧接着是选择“如果编码是UTF-8则添加”&#xff0c;如下图 2.设置ext code for tools 为system 具体解决办法是 工具-选项-环境-interfaces这一栏有一个“Text code for to…