我的教程都是親自測試可行才發布的,如果有任何問題歡迎留言或者來群里我每天都會解答。
新手可能有這樣的疑問,有了數據庫的存取方式,我們為什么還要使用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’項目
你需要添加以下依賴項:
- Spring Web(用于創建Web應用程序和RESTful服務)
- 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 中,存在則返回登錄成功的信息,不存在則返回未注冊的信息。
- 這是一個 REST 控制器類,包含兩個端點
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