[Redis] Spring Boot에 Redis 연동하기

2019. 9. 11. 09:33개발/기타

spring data redis, RedisTemplate ,RedisConnectionFactory을 이용하여 프로젝트에 레디스를 연결합니다.

1. Dependency

Spring Data Redis

  • 여러 Redis 드라이버(Lettuce 및 Jedis)를 추상화하여 사용할 수 있도록 함
  • Lettuce 드라이버를 사용한 Reactive API
  • RedisTemplate 을 통해 다양한 Redis작업, 예외 변환 및 직렬화 지원
  • pub/sub, Sentinel/Cluster 등 지원

더 자세한 내용은 공식문서를 참고하세요.

Maven project(pom.xml)

<dependency>    
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Gradle project(build.gradle)

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-redis')
}

2. Configuration

springboot 2.0이상부터는 auto-configuration으로 위의 빈(redisConnectionFactory, RedisTemplate, StringTemplate)들이 자동으로 생성되기 때문에 굳이 Configuration을 만들지 않아도 즉시 사용가능하다.
출처 기본기를 쌓는 정아마추어 코딩블로그

RedisConnectionFactory

  • Redis 서버와의 통신을 위한 low-level 추상화를 제공
  • 설정에 따라서 새로운 RedisConnection 또는 이미 존재하는 RedisConnection을 리턴.
  • RedisConnection 은 Redis 서버와의 통신 추상화를 제공하며, exception 발생시 Spring DataAccessException으로 전환.
  • RedisConnection 은 binary value를 인자로 받고 결과를 리턴하는 low-level method를 리턴.
  • Jedis, Jredis(1.7 Deprecated), Lettuce, SRP, RJC 등의 클라이언트 라이브러리가 있음.

    가장 많이 사용되는 Java의 Redis Client는 Jedis와 Lettuce입니다. 두 가지의 성능을 비교한 글을 참고하여 적합한 기술을 이용하시길 바랍니다.

RedisTemplate

  • Redis 서버에 Redis Command를 수행하기 위한 high-level 추상화를 제공
  • 오브젝트 serialization 과 connection management를 수행
  • Redis 서버에 데이터 CRUD를 위한 Key Type Operations 와 Key Bound Operations 인터페이스를 제공
  • 오브젝트 serialization 과 connection management를 수행
  • thread-safe 하며, 재 사용이 가능
  • 대부분의 기능에 RedisSerializer 인터페이스를 사용. StringRedisSerializer, JdkSerializationRedisSerializer, JacksonJsonRedisSerializer, Jackson2JsonRedisSerializer, GenericJackson2JsonRedisSerializer, OxmSerializer를 사용할 수 있음.
  • Redis에 저장된 키와 값이 java.lang.String이 되도록하는 것이 일반적이므로 StringRedisTemplate 확장 기능을 제공.
  • StringRedisSerializer를 사용하며, 저장된 키와 값은 사람이 읽을 수 있음.

RedisConfig.java

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
        return lettuceConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
        stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory());
        return stringRedisTemplate;
    }

}

application.properties

spring.redis.lettuce.pool.max-active=10
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=2
spring.redis.port=6379
spring.redis.host=127.0.0.1

References