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)Aufgabenwarteschlange
Nachrichtenwarteschlange
Verteilte Sperre# 🎜 🎜#
spring zu pom.xml hinzu -start-data-redis
s Abhängigkeitskoordinaten<!--Spring Data Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
3.3, KonfigurationsklasseVerwenden 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 istspring:
# 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
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("登录失败,请检查手机号或验证码是否正确"); }
这里忽略了其他的配置如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 # 连接池中的最小空闲连接
使用专门的客户端接口操作,将 Redis 整合到 Spring Boot 中。这里采用的是 RedisTemplate 工具类,该工具类由 SpringBoot 框架提供。
RedisTemplate 在处理 key 和 value 时,会对其进行序列化操作,这就会导致一些问题。
比如:输入的 key 值是 city
,但 redis 获得到的 key 值却是 xac]xedx00x05tx00x04city
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!