Redis est un magasin de structures de données en mémoire open source (sous licence BSD), utilisé comme base de données, cache et courtier de messages.
Traduction : Redis est un système de stockage de structures de données en mémoire open source. , il peut être utilisé comme : base de données, cache et middleware de messages.
Redis est une base de données clé-valeur open source haute performance développée en langage C. Les données officiellement fournies peuvent atteindre **100 000+** QPS.
QPS (Requêtes par seconde), le nombre de requêtes par seconde. (Encyclopédie Baidu)
Il stocke un riche ensemble de types de valeurs et est également appelé base de données NoSQL structurée.
NoSQL (Not only SQL), pas seulement SQL, fait référence aux bases de données non relationnelles en général.
La base de données NoSQL n'est pas destinée à remplacer les bases de données relationnelles, mais à les compléter.
Base de données relationnelle (SGBDR)
MySQL
Oracle
DB2
SQL Server
Base de données non relationnelle (NoSQL)
Redis
Mongo db
MemCached
Scénario d'application Redis
caching
file d'attente des tâches
file d'attente des messages
verrouillage distribué
Officiellement recommandé par Reddis Il existe trois types de clients Java : Jedis, Lettuce et Redisson.
Spring intègre le client Redis et fournit Spring Data Redis.
Le Starter correspondant est également fourni dans le projet Spring Boot, à savoir spring-boot-starter-data-redis.
Spring Data Redis est utilisé directement ici, et le processus de téléchargement et d'installation de Redis n'est pas affiché.
Après avoir créé le projet Spring Boot, ajoutez les coordonnées dépendantes de spring-boot-start-data-redis
dans pom.xmlspring-boot-start-data-redis
的依赖坐标
<!--Spring Data Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
这里忽略了其他的配置如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
/** * @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; } }
spring :3.3. La classe de configuration utilise des opérations d'interface client spécialisées pour intégrer Redis dans Démarrage de printemps. La classe d'outils RedisTemplate est utilisée ici, qui est fournie par le framework SpringBoot. RedisTemplate sérialisera la clé et la valeur lors de leur traitement, ce qui entraînera certains problèmes.
# Configuration Redis
redis :
hôte : localhost < br/> Port : 6379
# Déterminer en fonction du mot de passe que vous avez défini
Mot de passe : 123456
# Utiliser la base de données n° 0, il y a 16 bases de données par défaut
Base de données : 0
jedis :
pool :
max-active : 8 # Nombre maximum de connexions
max-wait : 1ms # Temps d'attente maximum de blocage du pool de connexions
max- ralenti : 4 # Pool de connexions La connexion inactive maximale
min-idle : 0 # La connexion inactive minimale dans le pool de connexions
Par exemple : la valeur de la clé d'entrée est city
, mais la valeur de la clé obtenue par redis est xac]xedx00x05tx00x04city
.
Par conséquent, une classe de configuration spéciale est nécessaire pour traiter spécifiquement les problèmes causés par le traitement de sérialisation par défaut de RedisTemplate.
Il est à noter qu'ici un nouveau sérialiseur est rechargé pour remplacer le sérialiseur d'origine, ce qui prouve qu'il avait à l'origine son propre sérialiseur par défaut JdkSerializationRedisSerializer.
@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("登录失败,请检查手机号或验证码是否正确"); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!