Heim  >  Artikel  >  Datenbank  >  So integriert SpringBoot den Redis-Cache-Verifizierungscode

So integriert SpringBoot den Redis-Cache-Verifizierungscode

王林
王林nach vorne
2023-05-27 21:16:23745Durchsuche

1. Einführung

Redis ist ein Open Source (BSD-lizenzierter) In-Memory-Datenstrukturspeicher, der als Datenbank, Cache und Nachrichtenbroker verwendet wird.

#🎜🎜 #Übersetzung: Redis ist ein Open-Source-In-Memory-Datenstrukturspeichersystem, das als Datenbank, Cache und Nachrichten-Middleware verwendet werden kann.

Redis ist eine Open-Source-Hochleistungs-Schlüsselwertdatenbank, die in der Sprache C entwickelt wurde. Die offiziell bereitgestellten Daten können **100000+** QPS erreichen.

QPS (Abfragen pro Sekunde), die Anzahl der Abfragen pro Sekunde. (Baidu-Enzyklopädie)

Es speichert einen relativ umfangreichen Wertetyp und wird auch als strukturierte NoSQL-Datenbank bezeichnet.

NoSQL (Not only SQL), nicht nur SQL, bezieht sich auf nicht-relationale Datenbanken im Allgemeinen.

NoSQL-Datenbank soll relationale Datenbanken nicht ersetzen, sondern ergänzen.

Relationale Datenbank (RDBMS)

  • MySQL

  • Oracle#🎜 🎜 #

  • DB2
  • SQL Server
  • nicht NoSQL ?? 🎜 🎜#

Aufgabenwarteschlange

  • Nachrichtenwarteschlange

  • Verteilte Sperre# 🎜 🎜#

  • 2. Einführung

    Es gibt drei offiziell von Reddis empfohlene Java-Clients: Jedis, Lettuce und Redisson.
Spring integriert den Redis-Client und stellt Spring Data Redis bereit.

Der entsprechende Starter wird auch im Spring Boot-Projekt bereitgestellt, nämlich spring-boot-starter-data-redis.
  • Spring Data Redis wird hier direkt verwendet und der Download- und Installationsprozess von Redis wird nicht angezeigt.

    3. Vorläufige Konfiguration
  • 3.1. Koordinatenimport

    Nachdem Sie das Spring Boot-Projekt erstellt haben, fügen Sie spring zu pom.xml hinzu -start-data-rediss Abhängigkeitskoordinaten
  • <!--Spring Data Redis-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  • 3.2, Konfigurationsdatei

    Andere Konfigurationen wie MySQL werden hier ignoriert und nur die Konfiguration von Redis werden hervorgehoben information
  • spring:
    # Redis-Konfiguration
    redis:
    host: localhost
    port: 6379
    # Nach Ihren eigenen Angaben Einstellungen Passwortentscheidung
    Passwort: 123456
    # Datenbank Nr. 0 betreiben, standardmäßig gibt es 16 Datenbanken
    Datenbank: 0
    jedis:
    pool:
    max-active: 8 # Maximale Anzahl von Verbindungen
    Max-wait: 1ms # Maximale blockierende Wartezeit des Verbindungspools
    Max-idle: 4 # Maximale Leerlaufverbindung im Verbindungspool
    Min -idle: 0 # Die minimale Leerlaufverbindung im Verbindungspool

  • 3.3, Konfigurationsklasse
Verwenden Sie spezielle Client-Schnittstellenoperationen, um Redis in Spring Boot zu integrieren. Hier kommt die Toolklasse RedisTemplate zum Einsatz, die vom SpringBoot-Framework bereitgestellt wird.

RedisTemplate serialisiert Schlüssel und Wert bei der Verarbeitung, was zu einigen Problemen führen kann.

Zum Beispiel: Der Eingabeschlüsselwert ist city, aber der von Redis erhaltene Schlüsselwert ist xac]xedx00x05tx00x04city.

Daher ist eine spezielle Konfigurationsklasse erforderlich, um speziell die Probleme zu lösen, die durch die Standard-Serialisierungsverarbeitung von RedisTemplate verursacht werden.

Es ist erwähnenswert, dass ein neuer Serializer neu geladen wird, um den ursprünglichen Serializer zu ersetzen, was beweist, dass er ursprünglich über einen eigenen Standard-Serializer JdkSerializationRedisSerializer verfügte.

/**
 * @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-Operation Redis

Da der Code hier relativ privat ist (hauptsächlich, weil ich zu faul bin, die Schnittstellen zur Generierung von Anmelde- und Bestätigungscodes zu organisieren und hier zu platzieren) Ich werde es hier direkt zur Demonstration verwenden.

Bestätigungscode senden

@PostMapping("/sendMsg")
public Result<String> sendMsg(@RequestBody User user, HttpSession session) {
    // 获取需要发送短信的手机号
    String userPhone = user.getPhone();
    if (StringUtils.isNotEmpty(userPhone)) {
        // 随机生成4位验证码
        String checkCode = ValidateCodeUtils.generateValidateCode4String(4);
        // 将生成的验证码保存到Redis中并设置有效期五分钟
        redisTemplate.opsForValue().set(userPhone, checkCode, 5, TimeUnit.MINUTES);
        return Result.success(checkCode);
    }
    return Result.error("短信发送错误");
}
spring-boot-start-data-redis的依赖坐标

@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("登录失败,请检查手机号或验证码是否正确");
}

3.2、配置文件

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

spring: 
  # Redis配置
  redis:
    host: localhost
    port: 6379
    # 根据自己设置的密码决定
    password: 123456
    # 操作0号数据库,默认有16个数据库
    database: 0
    jedis:
      pool:
        max-active: 8 # 最大连接数
        max-wait: 1ms # 连接池最大阻塞等待时间
        max-idle: 4   # 连接池中的最大空闲连接
        min-idle: 0   # 连接池中的最小空闲连接

3.3、配置类

使用专门的客户端接口操作,将 Redis 整合到 Spring Boot 中。这里采用的是 RedisTemplate 工具类,该工具类由 SpringBoot 框架提供。

RedisTemplate 在处理 key 和 value 时,会对其进行序列化操作,这就会导致一些问题。

比如:输入的 key 值是 city,但 redis 获得到的 key 值却是 xac]xedx00x05tx00x04city

Bestätigungscode eingeben, um sich anzumelden

rrreee

#🎜🎜 ## 🎜🎜#

Das obige ist der detaillierte Inhalt vonSo integriert SpringBoot den Redis-Cache-Verifizierungscode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen