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.pswp.cn/web/44425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44425.shtml
英文地址,請注明出處:http://en.pswp.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 …