Redis は、オープン ソース (BSD ライセンス) のメモリ内データ構造ストアであり、データベース、キャッシュ、メッセージ ブローカーとして使用されます。
翻訳: Redis はデータベース、キャッシュ、メッセージ ミドルウェアとして使用できるオープン ソースのインメモリ データ構造ストレージ システム。
Redis は、C 言語で開発されたオープンソースの高性能キー/値データベースで、公式に提供されるデータは **100000** QPS に達します。
QPS (1 秒あたりのクエリ数)、1 秒あたりのクエリ数。 (Baidu Encyclopedia)
豊富な値の種類のセットが格納されており、構造化 NoSQL データベースとも呼ばれます。
NoSQL (SQL だけではない) とは、SQL だけでなく、非リレーショナル データベース全般を指します。
NoSQL データベースは、リレーショナル データベースを置き換えることを目的としたものではなく、リレーショナル データベースを補完するものです。
リレーショナル データベース (RDBMS)
MySQL
##分散ロック
2. はじめに
Spring Boot プロジェクトは、対応するスターター (spring-boot-starter-data-redis) も提供します。
ここでは Spring Data Redis が直接使用されており、Redis のダウンロードとインストールのプロセスは示されていません。
3. 事前設定
3.1. 座標のインポート
<!--Spring Data Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
3.2、設定ファイルここでは MySQL などの他の設定は無視され、Redis の設定情報のみが強調表示されます
# Redisの設定
redis:host: localhostport: 6379
特殊なクライアント インターフェイス操作を使用して、Redis を Spring Boot に統合します。ここでは、SpringBoot フレームワークによって提供される RedisTemplate ツール クラスが使用されます。
#設定したパスワードに応じて決定
パスワード: 123456
# データベースNo.を操作します。 0、デフォルトでは 16 のデータベースがあります
データベース: 0
jedis:
pool:
max-active: 8 # 最大接続数
max-wait: 1ms #最大ブロッキング待機時間接続プールの
max-idle: 4 # 接続プール内の最大アイドル接続
min-idle: 0 # 接続プール内の最小アイドル接続
3.3、設定class
例: 入力キー値は
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 キャッシュ検証コードを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。