ホームページ >データベース >Redis >SpringBoot が Redis キャッシュ検証コードを統合する方法

SpringBoot が Redis キャッシュ検証コードを統合する方法

王林
王林転載
2023-05-27 21:16:23754ブラウズ

1. はじめに

Redis は、オープン ソース (BSD ライセンス) のメモリ内データ構造ストアであり、データベース、キャッシュ、メッセージ ブローカーとして使用されます。

翻訳: Redis はデータベース、キャッシュ、メッセージ ミドルウェアとして使用できるオープン ソースのインメモリ データ構造ストレージ システム。

Redis は、C 言語で開発されたオープンソースの高性能キー/値データベースで、公式に提供されるデータは **100000** QPS に達します。

QPS (1 秒あたりのクエリ数)、1 秒あたりのクエリ数。 (Baidu Encyclopedia)

豊富な値の種類のセットが格納されており、構造化 NoSQL データベースとも呼ばれます。

NoSQL (SQL だけではない) とは、SQL だけでなく、非リレーショナル データベース全般を指します。

NoSQL データベースは、リレーショナル データベースを置き換えることを目的としたものではなく、リレーショナル データベースを補完するものです。

リレーショナル データベース (RDBMS)

  • MySQL

  • ##Oracle

  • DB2

  • ##SQL Server
  • 非リレーショナル データベース (NoSQL)

    Redis
  • Mongo db
  • MemCached
  • Redis アプリケーション シナリオ

    #キャッシュ
  • タスク キュー
  • #メッセージ キュー
  • ##分散ロック

  • 2. はじめに

  • Reddis が公式に推奨する Java クライアントは、Jedis、Lettuce、Redisson の 3 つです。

Spring は Redis クライアントを統合し、Spring Data Redis を提供します。

Spring Boot プロジェクトは、対応するスターター (spring-boot-starter-data-redis) も提供します。

ここでは Spring Data Redis が直接使用されており、Redis のダウンロードとインストールのプロセスは示されていません。

3. 事前設定

3.1. 座標のインポート

Spring Boot プロジェクトを作成した後、

spring-boot-start-data を pom.xml -Dependency に追加します。 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
#設定したパスワードに応じて決定
パスワード: 123456
# データベースNo.を操作します。 0、デフォルトでは 16 のデータベースがあります
データベース: 0
jedis:
pool:
max-active: 8 # 最大接続数
max-wait: 1ms #最大ブロッキング待機時間接続プールの
max-idle: 4 # 接続プール内の最大アイドル接続
min-idle: 0 # 接続プール内の最小アイドル接続


3.3、設定class

特殊なクライアント インターフェイス操作を使用して、Redis を Spring Boot に統合します。ここでは、SpringBoot フレームワークによって提供される RedisTemplate ツール クラスが使用されます。

RedisTemplate はキーと値を処理するときにシリアル化するため、いくつかの問題が発生します。

例: 入力キー値は

city

ですが、redis によって取得されたキー値は

\xac]xed\x00\x05t\x00\x04city

です。 したがって、RedisTemplate のデフォルトのシリアル化処理によって引き起こされる問題に特に対処するには、特別な構成クラスが必要です。 新しいシリアライザーが再ロードされて元のシリアライザーが置き換えられることは注目に値します。これは、元々独自のデフォルト シリアライザー 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

ここではコードが比較的プライベートであるため (主に、ログインおよび検証コード生成インターフェイスを整理するのが面倒なため)、テストを直接使用します。デモンストレーション用のクラスはこちらです。

確認コードを送信

@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("短信发送错误");
}

確認コードを入力してログイン

@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("登录失败,请检查手机号或验证码是否正确");
}
SpringBoot が Redis キャッシュ検証コードを統合する方法

以上がSpringBoot が Redis キャッシュ検証コードを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。