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

So integriert SpringBoot den Redis-Cache-Verifizierungscode

王林
Freigeben: 2023-05-27 21:16:23
nach vorne
789 Leute haben es durchsucht

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>
    Nach dem Login kopieren
  • 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;
    }
}
Nach dem Login kopieren

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("短信发送错误");
}
Nach dem Login kopieren
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("登录失败,请检查手机号或验证码是否正确");
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage