Web菜鳥教程 - Radis實現高性能數據庫

Redis是用C語言開發的一個高性能鍵值對數據庫,可用于數據緩存,主要用于處理大量數據的高訪問負載。

也就是說,如果你對性能要求不高,不用Radis也是可以的。不過作為最自己寫的程序有高要求的程序員,自然是要學一下的,畢竟大部分的網站都配置了radis。接下來一三部分來介紹radis:

  • 安裝
  • 配置
  • 使用

Radis安裝

有兩種方式安裝,一種是下載安裝包安裝,radis是微軟出品的開源項目,代碼位于github上,大家可以戳這里下載最新的release包。
在這里插入圖片描述
下載完后解壓到指定目錄后,打開命令行,輸入啟動命令

redis-server.exe redis.windows.conf

在這里插入圖片描述

當然如果你用的是寶塔這種,你可以直接在軟件商店搜索并安裝,速度更快更便捷。

在這里插入圖片描述
不管是windows版本還是寶塔下載的版本,直接啟動使用的默認配置。密碼為空,端口為6379,host為本機127.0.0.1。好了接下來就是將他整合到Spring里面。

整合到Springboot

初一看你會覺得radis挺難的,不知道是什么玩意,但是如果結合前面兩篇文章來看,radis的使用也無外乎以下三點:

  • 引入環境
  • 配置Radis
  • 使用RadisTemplate提供的功能實現自己想要的接口。

使用起來感覺和mybatis的使用也都大差不差嘛。好勒話不多說直接開整。我們現在以接收手機驗證碼邏輯來整合radis。之所以需要在這個邏輯中引入Radis是因為客戶再獲取驗證碼的時候可能不是一次通過,它需要不斷地獲取驗證碼,實際上,在固定時間內驗證碼并不會變,他只是沒有收到而已,我們重發一遍就好了。

引入依賴

在pom中引入依賴:

<!--redis依賴配置-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后我們需要配置radis,盡管我們啟動的時候使用的默認配置,但是springboot是不知道的,因此我們需要在spring的節點下引入radis的配置:

  redis:host: localhost # Redis服務器地址database: 0 # Redis數據庫索引(默認為0)port: 6379 # Redis服務器連接端口password: # Redis服務器連接密碼(默認為空)jedis:pool:max-active: 8 # 連接池最大連接數(使用負值表示沒有限制)max-wait: -1ms # 連接池最大阻塞等待時間(使用負值表示沒有限制)max-idle: 8 # 連接池中的最大空閑連接min-idle: 0 # 連接池中的最小空閑連接timeout: 3000ms # 連接超時時間(毫秒)

上面是關于radis鏈接的配置,我們還需要添加一些自定義key的配置,這個是radis業務上的。

# 自定義redis key,在根節點添加
redis:key:prefix:authCode: "portal:authCode:"expire:authCode: 120 # 驗證碼超期時間

實現功能

配置寫好了,我們接下來實現功能。也就是定義一些radis相關的操作方便其他業務代碼調用。Radis用的最多的幾個功能:

  • 存儲數據
  • 獲取數據
  • 設置超時
  • 刪除數據
  • 自增操作

我們把這些功能定義好接口:

package org.lange.study.service;/*** redis操作Service,* 對象和數組都以json形式進行存儲*/
public interface RedisService {/*** 存儲數據*/void set(String key, String value);/*** 獲取數據*/String get(String key);/*** 設置超期時間*/boolean expire(String key, long expire);/*** 刪除數據*/void remove(String key);/*** 自增操作* @param delta 自增步長*/Long increment(String key, long delta);}

然后注入StringRedisTemplate,實現RedisService接口:(他其實是RedisTemplate的一個子類,StringRedisTemplate將字符串的處理簡化了,RedisTemplate可以處理任意對象,而StringRedisTemplate需要先轉換成json字符串才能保存起來)

多數時候我們頻繁操作的數據都是以鍵值對的相識存在,這也是引入radis的原因。接下來我們通過接入到業務層更深刻理解Radis的使用。

驗證碼就兩個功能,一個是獲取驗證碼,當用戶獲取到驗證碼之后會調用驗證接口來驗證他填寫的驗證碼是否正確。所以我們先把接口定義一下:
UmsMemberService.java

package org.lange.study.service;import org.lange.study.common.api.CommonResult;/*** 會員管理Service*/
public interface UmsMemberService {/*** 生成驗證碼*/CommonResult generateAuthCode(String telephone);/*** 判斷驗證碼和手機號碼是否匹配*/CommonResult verifyAuthCode(String telephone, String authCode);}

寫一個控制器UmsMemberController:

package org.lange.study.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.lange.study.common.api.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;/*** 添加根據電話號碼獲取驗證碼的接口和校驗驗證碼的接口* 會員登錄注冊管理Controller*/
@Controller
@Api(tags = "UmsMemberController", description = "會員登錄注冊管理")
@RequestMapping("/sso")
public class UmsMemberController {@Autowiredprivate UmsMemberService memberService;@ApiOperation("獲取驗證碼")@RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)@ResponseBodypublic CommonResult getAuthCode(@RequestParam String telephone) {return memberService.generateAuthCode(telephone);}@ApiOperation("判斷驗證碼是否正確")@RequestMapping(value = "/verifyAuthCode", method = RequestMethod.POST)@ResponseBodypublic CommonResult updatePassword(@RequestParam String telephone,@RequestParam String authCode) {return memberService.verifyAuthCode(telephone,authCode);}
}

然后我們要實現對應的Service,UmsMemberServiceImpl.java:
假定我們的驗證碼業務場景為:

生成驗證碼時,將自定義的Redis鍵值加上手機號生成一個Redis的key,以驗證碼為value存入到Redis中,并設置過期時間為自己配置的時間(這里為120s)。校驗驗證碼時根據手機號碼來獲取Redis里面存儲的驗證碼,并與傳入的驗證碼進行比對。

UmsMemberServiceImpl.java

package org.lange.study.service.impl;import org.lange.study.common.api.CommonResult;
import org.lange.study.service.RedisService;
import org.lange.study.service.UmsMemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import java.util.Random;@Service
public class UmsMemberServiceImpl implements UmsMemberService {@Autowiredprivate RedisService redisService;@Value("${redis.key.prefix.authCode}")private String REDIS_KEY_PREFIX_AUTH_CODE;@Value("${redis.key.expire.authCode}")//這個@value就是讀取前面的配置private Long AUTH_CODE_EXPIRE_SECONDS;/*** 生成的時候設置超時間并保存到radis,然后將驗證碼返回給客戶端*/@Overridepublic CommonResult generateAuthCode(String telephone) {StringBuilder sb = new StringBuilder();Random random = new Random();for (int i = 0; i < 6; i++) {sb.append(random.nextInt(10));}//驗證碼綁定手機號并存儲到redisredisService.set(REDIS_KEY_PREFIX_AUTH_CODE + telephone, sb.toString());redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE + telephone, AUTH_CODE_EXPIRE_SECONDS);return CommonResult.success(sb.toString(), "獲取驗證碼成功");}/*** 對輸入的驗證碼進行校驗,調用get方法就好了*/@Overridepublic CommonResult verifyAuthCode(String telephone, String authCode) {if (StringUtils.isEmpty(authCode)) {return CommonResult.failed("請輸入驗證碼");}String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone);boolean result = authCode.equals(realAuthCode);if (result) {return CommonResult.success(null, "驗證碼校驗成功");} else {return CommonResult.failed("驗證碼不正確");}}
}

在上述案例中,我只用到了Radis的設置和獲取以及設置有效時間的方法,Radis的其他功能大家可以根據需要去探索。

運行

我們可以使用swagger進行接口調試

訪問Swagger的API文檔地址http://localhost:8080/swagger-ui.html ,對接口進行測試。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP Mysql查詢全部全部返回字符串類型

設置pdo屬性 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

08-1_Qt 5.9 C++開發指南_QPainter繪圖

文章目錄 前言1. QPainter 繪圖系統1.1 QPainter 與QPaintDevice1.2 paintEvent事件和繪圖區1.3 QPainter 繪圖的主要屬性 2. QPen的主要功能3. QBrush的主要功能4. 漸變填充5. QPainter 繪制基本圖形元件5.1 基本圖像元件5.2 QpainterPath的使用 前言 本章所介紹內容基本在《…

chatserver服務器開發筆記

chatserver服務器開發筆記 1 chatserver2 開發環境3 編譯 1 chatserver 集群聊天服務器和客戶端代碼&#xff0c;基于muduo、redis、mysql實現。 學習于https://fixbug.ke.qq.com/ 本人已經掛github&#xff1a;https://github.com/ZixinChen-S/chatserver/tree/main 需要該項…

kubernetes pod 資源限制 探針

資源限制 當定義 Pod 時可以選擇性地為每個容器設定所需要的資源數量。 最常見的可設定資源是 CPU 和內存大小&#xff0c;以及其他類型的資源。 當為 Pod 中的容器指定了 request 資源時&#xff0c;代表容器運行所需的最小資源量&#xff0c;調度器就使用該信息來決定將 Pod …

Java課題筆記~ JSP開發模型

MVC 1.JSP演化歷史 1. 早期只有servlet&#xff0c;只能使用response輸出標簽數據&#xff0c;非常麻煩 2. 后來有了jsp&#xff0c;簡化了Servlet的開發&#xff0c;如果過度使用jsp&#xff0c;在jsp中即寫大量的java代碼&#xff0c;有寫html表&#xff0c;造成難于維護&…

計算機網絡實驗4:HTTP、DNS協議分析

文章目錄 1. 主要教學內容2. HTTP協議3. HTTP分析實驗【實驗目的】【實驗原理】【實驗內容】【實驗思考】 4. HTTP分析實驗可能遇到的問題4.1 捕捉不到http報文4.2 百度是使用HTTPS協議進行傳輸4.3 Wireshark獲得數據太多如何篩選4.4 http報文字段含義不清楚General&#xff08…

[4G/5G/6G專題基礎-161]:常見的濾波技術

1. 濾波概述 1.1 什么是濾波 濾波&#xff08;Filtering&#xff09;是信號處理中的一種基本操作&#xff0c;用于改變信號的特性或者去除信號中的干擾成分。濾波器可以看作是一種系統&#xff0c;將輸入信號作為輸入&#xff0c;經過處理后產生輸出信號。 濾波在信號處理中…

Git和GitHub

文章目錄 1.Git介紹2. 常用命令3. Git分支操作4. Git團隊協作機制5. GitHub操作6. IDEA集成Git7.IDEA操作GitHub8. Gitee 1.Git介紹 Git免費的開源的分布式版本控制系統&#xff0c;可以快速高效從小到大的各種項目 Git易于學習&#xff0c;占地面積小&#xff0c;性能快。它…

@RunWith的使用

引言 當談到在Java中進行單元測試時&#xff0c;JUnit是開發人員的常見選擇之一。JUnit是一個流行的單元測試框架&#xff0c;它允許您編寫和執行測試來驗證代碼的正確性。在JUnit中&#xff0c;RunWith注解是一個強大的工具&#xff0c;它可以用來定制測試運行器&#xff0c;…

【日常積累】RPM包依賴下載及私有yum倉庫搭建

概述 某些時候&#xff0c;我們需要下載某個RPM包依賴的依賴。如某些內網環境&#xff0c;就需要自行準備rpm包。可以通過能上互聯網的服務器進行相應的rpm包下載&#xff0c;然后在拷貝到相應的服務器安裝&#xff0c;或者搭建自己的內容rpm包倉庫。 查看*.rpm 包依賴&#…

Flink多流處理之Broadcast(廣播變量)

寫過Spark批處理的應該都知道,有一個廣播變量broadcast這樣的一個算子,可以優化我們計算的過程,有效的提高效率;同樣在Flink中也有broadcast,簡單來說和Spark中的類似,但是有所區別,首先Spark中的broadcast是靜態的數據,而Flink中的broadcast是動態的,也就是源源不斷的數據流.在…

批處理自動切換ip地址與網絡的啟用、禁用

啟用禁用網絡 echo off :: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM --> If error flag set,…

什么是微服務?

2.微服務的優缺點 優點 單一職責原則每個服務足夠內聚&#xff0c;足夠小&#xff0c;代碼容易理解&#xff0c;這樣能聚焦一個指定的業務功能或業務需求&#xff1b;開發簡單&#xff0c;開發效率提高&#xff0c;一個服務可能就是專一的只干一件事&#xff1b;微服務能夠被小…

命令提示符之操作基礎(Windows)

打開命令提示符 方法一 打開指定文件的文件夾&#xff0c;在路徑欄里輸入“cmd”&#xff0c;回車&#xff0c;就進入控制臺了。默認路徑就是指定文件夾的路徑。 方法二 打開指定的文件夾&#xff0c;按住shift鍵&#xff0c;在空白處右擊&#xff0c;在菜單欄中選擇“在此處打…

社區團購商城拼團秒殺接龍分銷團長小程序開源版開發

社區團購商城拼團秒殺接龍分銷團長小程序開源版開發 功能介紹&#xff1a; 商品管理&#xff1a;增加商品-商品列表-商品分類-商品單/多規格-商品標簽 訂單管理&#xff1a;訂單列表-訂單挑選-訂單導出-訂單打印-批量發貨-商品評價 會員管理&#xff1a;會員列表-會員挑選-會員…

【Git】—— 標簽管理

目錄 &#xff08;一&#xff09;理解標簽 1、作用 &#xff08;二&#xff09;創建標簽 &#xff08;三&#xff09;操作標簽 1、刪除標簽 2、推送標簽 3、刪除遠程標簽 &#xff08;一&#xff09;理解標簽 標簽 tag &#xff0c;可以簡單的理解為是對某次 commit 的…

python中的迭代器和生成器

一、迭代器 支持迭代的容器&#xff0c;如列表&#xff08;list&#xff09;、元組&#xff08;tuple&#xff09;、字典&#xff08;dict&#xff09;、集合&#xff08;set&#xff09;這些序列式容器。 自定義迭代器的類中必須實現以下2個方法&#xff1a; __next__(self)…

監控Kubernetes 控制面組件的關鍵指標

控制面組件的監控&#xff0c;包括 APIServer、Controller-manager&#xff08;簡稱 CM&#xff09;、Scheduler、etcd 四個組件。 1、APIServer APIServer 的核心職能是 Kubernetes 集群的 API 總入口&#xff0c;Kube-Proxy、Kubelet、Controller-Manager、Scheduler 等都需…

【字符串】649. Dota2 參議院

649. Dota2 參議院 解題思路 R true 表示循環結束之后 字符串仍然存在 Rflag > 0 說明R在D之前出現 R可以消滅Dflag < 0 說明D在R之前出現 D 可以消滅R一旦其中有一個為false 說明只剩下R 或者D 那么就可以決定誰獲勝遍歷字符串 如果當前字符是R 判斷flag 如果flag &l…

‘open3d.open3d.geometry.PointCloud‘ object has no attribute ‘voxel_down_sample‘

scene_cloud open3d.geometry.PointCloud() scene_cloud.points open3d.utility.Vector3dVector(scene_points) scene_cloud scene_cloud.voxel_down_sample(voxel_size) 執行上面代碼第三句報錯&#xff0c;出現了下面這個錯誤&#xff1a; AttributeError: open3d.open…