>데이터 베이스 >Redis >SpringBoot가 Redis 캐시 확인 코드를 통합하는 방법

SpringBoot가 Redis 캐시 확인 코드를 통합하는 방법

王林
王林앞으로
2023-05-27 21:16:23757검색

1. 소개

Redis는 데이터베이스, 캐시 및 메시지 브로커로 사용되는 오픈 소스(BSD 라이선스) 인 메모리 데이터 구조 저장소입니다.

번역: Redis는 오픈 소스 인 메모리 데이터 구조 저장 시스템입니다. , 데이터베이스, 캐시 및 메시지 미들웨어로 사용할 수 있습니다.

Redis는 C 언어로 개발된 오픈 소스 고성능 키-값 데이터베이스입니다. 공식적으로 제공되는 데이터는 **100000+** QPS에 달할 수 있습니다.

QPS(초당 쿼리 수), 초당 쿼리 수입니다. (바이두 백과사전)

다양한 값 유형 세트를 저장하며 구조화된 NoSQL 데이터베이스라고도 합니다.

NoSQL(Not only SQL)은 SQL뿐만 아니라 일반적으로 비관계형 데이터베이스를 의미합니다.

NoSQL 데이터베이스는 관계형 데이터베이스를 대체하는 것이 아니라 보완하기 위한 것입니다.

관계형 데이터베이스(RDBMS)

  • MySQL

  • Oracle

  • DB2

  • SQL Server

비관계형 데이터베이스(NoSQL)

  • Redis

  • 몽고 DB

  • MemCached

Redis 애플리케이션 시나리오

  • caching

  • 작업 대기열

  • 메시지 대기열

  • 분산 잠금

2. 소개

Reddis에서 공식적으로 추천하는 곳이 있습니다. 세 가지 유형의 Java 클라이언트: Jedis, Lettuce 및 Redisson.

Spring은 Redis 클라이언트를 통합하고 Spring 데이터 Redis를 제공합니다.

해당 Starter는 Spring Boot 프로젝트, 즉 spring-boot-starter-data-redis에서도 제공됩니다.

여기에서는 Spring Data Redis가 직접 사용되며 Redis의 다운로드 및 설치 과정은 표시되지 않습니다.

3. 사전 구성

3.1. 좌표 가져오기

Spring Boot 프로젝트 생성 후 pom.xmlspring-boot-start-data-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
    # 根据自己设置的密码决定
    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

/**
 * @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-boot-start-data-redis의 종속 좌표를 추가합니다. . 구성 파일

여기에서는 MySQL과 같은 다른 구성은 무시되고 Redis의 구성 정보만 강조 표시됩니다

spring:
# Redis 구성
redis:
호스트: localhost
포트: 6379
# 설정한 비밀번호에 따라 결정
비밀번호: 123456
# 0번 데이터베이스를 운영하며, 기본적으로 16개의 데이터베이스가 있다.
데이터베이스: 0
jedis:
pool:
max-active: 8 # 최대 연결 수
max-wait: 1ms # 연결 풀의 최대 차단 대기 시간
max- 유휴: 4 # 연결 풀 최대 유휴 연결
        min-idle: 0   # 연결 풀의 최소 유휴 연결

3.3 구성 클래스

는 Redis를 Spring에 통합하기 위해 특수한 클라이언트 인터페이스 작업을 사용합니다. 신병. 여기에서는 SpringBoot 프레임워크에서 제공하는 RedisTemplate 도구 클래스가 사용됩니다.

RedisTemplate은 키와 값을 처리할 때 직렬화하므로 몇 가지 문제가 발생할 수 있습니다.

SpringBoot가 Redis 캐시 확인 코드를 통합하는 방법예: 입력 키 값은 city이지만 redis에서 얻은 키 값은 xac]xedx00x05tx00x04city입니다.

따라서 RedisTemplate의 기본 직렬화 처리로 인해 발생하는 문제를 구체적으로 처리하려면 특별한 구성 클래스가 필요합니다.

여기서 원래 직렬 변환기를 대체하기 위해 새 직렬 변환기가 다시 로드된다는 점은 주목할 가치가 있습니다. 이는 원래 자체 기본 직렬 변환기 JdkSerializationRedisSerializer가 있음을 증명합니다. SpringBoot가 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("短信发送错误");
}

4. Redis의 Java 작업🎜🎜여기서는 코드가 상대적으로 비공개이므로(주로 로그인 및 확인 코드 생성 인터페이스를 정리하기에는 너무 게으른 관계로) 여기서 데모용으로 테스트 클래스를 직접 사용하겠습니다. 🎜🎜인증 코드 보내기🎜
@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("登录失败,请检查手机号或验证码是否正确");
}
🎜🎜🎜🎜로그인하려면 인증 코드를 입력하세요🎜rrreee🎜🎜🎜

위 내용은 SpringBoot가 Redis 캐시 확인 코드를 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제