最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot詳解如何整合Redis緩存驗證碼

 更新時間:2022年07月04日 11:23:27   作者:陳寶子  
本文主要介紹了SpringBoot集成Redis實現(xiàn)驗證碼的緩存簡單案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1、簡介

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker.

翻譯:Redis 是一個開源的內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),它可以用作:數(shù)據(jù)庫、緩存和消息中間件。

官網(wǎng)鏈接:https://redis.io

Redis 是用 C 語言開發(fā)的一個開源的高性能鍵值對(key-value)數(shù)據(jù)庫,官方提供的數(shù)據(jù)是可以達到 **100000+**的 QPS。

QPS(Queries-per-second),每秒內(nèi)查詢次數(shù)。(百度百科)

它存儲的 value 類型比較豐富,也被稱為結(jié)構(gòu)化的 NoSQL 數(shù)據(jù)庫。

NoSQL(Not only SQL),不僅僅是 SQL,泛指非關(guān)系型數(shù)據(jù)庫。

NoSQL 數(shù)據(jù)庫并不是要取代關(guān)系型數(shù)據(jù)庫,而是關(guān)系型數(shù)據(jù)庫的補充。

關(guān)系型數(shù)據(jù)庫(RDBMS)

  • MySQL
  • Oracle
  • DB2
  • SQL Server

非關(guān)系型數(shù)據(jù)庫(NoSQL)

  • Redis
  • Mongo db
  • MemCached

Redis 應(yīng)用場景

  • 緩存
  • 任務(wù)隊列
  • 消息隊列
  • 分布式鎖

2、介紹

Redis 的 Java 客戶端很多,官方推薦的有三種:Jedis、Lettuce、Redisson。

Spring 對 Redis 客戶端進行了整合,提供了 Spring Data Redis。

在 Spring Boot 項目中還提供了對應(yīng)的 Starter,即 spring-boot-starter-data-redis。

在這里直接使用的是Spring Data Redis,且不展示Redis的下載和安裝過程啦。

3、前期配置

3.1、坐標導(dǎo)入

在創(chuàng)建完成Spring Boot項目之后,在pom.xml中加入spring-boot-start-data-redis的依賴坐標

<!--Spring Data Redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.2、配置文件

這里忽略了其他的配置如MySQL這些,只突出Redis的配置信息

spring: 
  # Redis配置
  redis:
    host: localhost
    port: 6379
    # 根據(jù)自己設(shè)置的密碼決定
    password: 123456
    # 操作0號數(shù)據(jù)庫,默認有16個數(shù)據(jù)庫
    database: 0
    jedis:
      pool:
        max-active: 8 # 最大連接數(shù)
        max-wait: 1ms # 連接池最大阻塞等待時間
        max-idle: 4   # 連接池中的最大空閑連接
        min-idle: 0   # 連接池中的最小空閑連接

3.3、配置類

使用 springboot 整合 redis 的專用客戶端接口操作。此處使用的是 SpringBoot 框架提供的 RedisTemplate。

RedisTemplate 在處理 key 和 value 時,會對其進行序列化操作,這就會導(dǎo)致一些問題。

比如:輸入的 key 值是 city,但 redis 獲得到的 key 值卻是 \xac]xed\x00\x05t\x00\x04city。

因此就需要一個專門的配置類,來專門處理 RedisTemplate 默認的序列化處理所導(dǎo)致的問題。

值得注意的是,這里是重新加載一個新的序列化器來取代原來的序列化器,這就證明著其原本是有著自己默認的序列化器JdkSerializationRedisSerializer。

/**
 * @classname RedisConfig
 * @description Redis配置類,更換key的默認序列化器
 * @author xBaozi
 * @date 19:04 2022/7/2
 **/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

4、Java操作Redis

在這里由于代碼比較隱私(主要是懶得整理登錄和生成驗證碼的接口放在這里),因此這里就直接使用測試類進行演示。

發(fā)送驗證碼

@PostMapping("/sendMsg")
public Result<String> sendMsg(@RequestBody User user, HttpSession session) {
    // 獲取需要發(fā)送短信的手機號
    String userPhone = user.getPhone();
    if (StringUtils.isNotEmpty(userPhone)) {
        // 隨機生成4位驗證碼
        String checkCode = ValidateCodeUtils.generateValidateCode4String(4);
        // 將生成的驗證碼保存到Redis中并設(shè)置有效期五分鐘
        redisTemplate.opsForValue().set(userPhone, checkCode, 5, TimeUnit.MINUTES);
        return Result.success(checkCode);
    }
    return Result.error("短信發(fā)送錯誤");
}

輸入驗證碼登錄

@PostMapping("/login")
public Result<User> login(@RequestBody Map map, HttpSession session) {
    log.info("map: {}", map);
    // 獲取用戶輸入信息
    String phone = (String)map.get("phone");
    String code = (String)map.get("code");
    // 從Redis中取出驗證碼
    String checkCode = redisTemplate.opsForValue().get(phone);
    // 比對驗證碼是否一致
    if (StringUtils.isNotEmpty(checkCode) && checkCode.equals(code.toLowerCase())) {
        // 將用戶id存放到session中
        session.setAttribute("user", user.getId());
        // 登錄成功,刪除Redis中的驗證碼
        redisTemplate.delete(phone);
        // 將用戶信息返回到前端
        return Result.success(user);
    }
    return Result.error("登錄失敗,請檢查手機號或驗證碼是否正確");
}

到這里Redis的簡單整合就完成啦,這里的Redis使用仍是比較簡單的,驗證碼也只是Redis的一個最簡單使用方式之一而已,在后續(xù)狗子我將會嘗試Redis的其他用法,在沒有偷懶的時候?qū)懞霉P記記錄下來!

到此這篇關(guān)于SpringBoot詳解如何整合Redis緩存驗證碼的文章就介紹到這了,更多相關(guān)SpringBoot Redis緩存驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java微信公眾平臺之自定義菜單

    Java微信公眾平臺之自定義菜單

    這篇文章主要為大家詳細介紹了Java微信公眾平臺之自定義菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java異常處理UncaughtExceptionHandler使用實例代碼詳解

    Java異常處理UncaughtExceptionHandler使用實例代碼詳解

    當一個線程由于未捕獲異常即將終止時,Java虛擬機將使用thread . getuncaughtexceptionhandler()查詢線程的uncaughtException處理程序,并調(diào)用處理程序的uncaughtException方法,將線程和異常作為參數(shù)傳遞
    2023-03-03
  • Java中的abstract和interface

    Java中的abstract和interface

    abstract和interface關(guān)鍵字在Java中隨處可見,它是Java三大特性封裝、繼承、多態(tài)特性的實現(xiàn)重要支柱之一。interface關(guān)鍵字用于定義接口抽象,其本質(zhì)上是用于定義類型、定義類所具有的能力,下面來看看詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • java如何解析/讀取xml文件

    java如何解析/讀取xml文件

    這篇文章主要為大家詳細介紹了java如何解析/讀取xml文件的方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • maven pom中內(nèi)置變量及引用的實現(xiàn)

    maven pom中內(nèi)置變量及引用的實現(xiàn)

    maven其實有很多內(nèi)置變量供開發(fā)著在開發(fā)中使用,本文主要介紹了maven pom中內(nèi)置變量及引用的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringMVC如何訪問WEB-INF jsp過程解析

    SpringMVC如何訪問WEB-INF jsp過程解析

    這篇文章主要介紹了SpringMVC如何訪問WEB-INF jsp過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • JAVA使用隨機數(shù)實現(xiàn)概率抽獎

    JAVA使用隨機數(shù)實現(xiàn)概率抽獎

    這篇文章主要為大家詳細介紹了JAVA使用隨機數(shù)實現(xiàn)概率抽獎,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Java同學找工作最懵圈的問題:到底啥是分布式系統(tǒng)開發(fā)經(jīng)驗?(推薦)

    Java同學找工作最懵圈的問題:到底啥是分布式系統(tǒng)開發(fā)經(jīng)驗?(推薦)

    這篇文章主要介紹了分布式系統(tǒng)開發(fā)經(jīng)驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • SpringBoot整合JPA的實例代碼

    SpringBoot整合JPA的實例代碼

    本篇文章主要介紹了SpringBoot整合JPA的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring實現(xiàn)定時任務(wù)的幾種方式總結(jié)

    Spring實現(xiàn)定時任務(wù)的幾種方式總結(jié)

    Spring Task 是 Spring 框架提供的一種任務(wù)調(diào)度和異步處理的解決方案,可以按照約定的時間自動執(zhí)行某個代碼邏輯它可以幫助開發(fā)者在 Spring 應(yīng)用中輕松地實現(xiàn)定時任務(wù)、異步任務(wù)等功能,提高應(yīng)用的效率和可維護性,需要的朋友可以參考下本文
    2024-07-07

最新評論

盐亭县| 阳东县| 榆树市| 苏州市| 儋州市| 澜沧| 谷城县| 沾益县| 浑源县| 休宁县| 丹阳市| 霞浦县| 贺州市| 宁陵县| 溧水县| 武清区| 静安区| 科技| 岚皋县| 施秉县| 永新县| 颍上县| 金山区| 独山县| 乌拉特前旗| 贺兰县| 竹溪县| 宜川县| 鄂托克前旗| 正蓝旗| 田东县| 健康| 鄂州市| 德令哈市| 澄迈县| 平安县| 平舆县| 罗定市| 白河县| 柏乡县| 余姚市|