회원가입 시 이메일 인증을 하기 위해 키 값을 redis에 저장하고자 한다.
로컬 환경에 직접 설치하는 것 보다는 Docker를 이용하여 설치하기로 했다.
docker run -d --name redis -p 6379:6379 redis
gradle 의존성을 추가하려고 보니 Java의 Redis Client에는 두 가지 종류가 있었다.
두 가지 모두 유명한 오픈소스이지만, Lettuce가 Netty(비동기 이벤트 기반 고성능 네트워크 프레임워크) 기반의 클라이언트라서 비동기로 요청을 처리하기 때문에 더 성능이 높다고 한다.
속도도, 성능도 더 좋다고 하니 고민의 여지 없이 Lettuce를 사용하겠다.
build.gradle
// redis lettuce
implementation'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
application.properties
#Redis 설정
redis.host=127.0.0.1
redis.port=6379
RedisConfig.java
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@RequiredArgsConstructor
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@Value("${redis.host}")
private String redisHost;
@Value("${redis.port}")
private int redisPort;
/***
* Redis와 Connection 생성
*/
@Bean
public RedisConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(redisHost, redisPort);
}
/***
* Redis 서버와 통신
* StringRedisTemplate를 사용하여 Key, value를 모두 문자열로 저장
*/
@Bean
public StringRedisTemplate redisTemplate() {
final StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory());
return redisTemplate;
}
}