[SpringBoot] Redis 사용하기

tkppp·2022년 3월 5일
0

레디스란?

https://medium.com/garimoo/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-01-92aaa24ca8cc

레디스를 스프링부트에서 사용하기

spring-data-redis 의존성 추가

implementation("org.springframework.boot:spring-boot-starter-data-redis")

레디스 연동 설정

# application.yml
spring:
  redis:
    host: localhost
    port: 6379
@Configuration
class RedisConfig {
    
    @Value("\${spring.redis.host}")
    lateinit var host: String

    @Value("\${spring.redis.port}")
    var port: Int = 0

    @Bean
    fun redisConnectionFactory(): RedisConnectionFactory{
        return LettuceConnectionFactory(host, port);
    }

    @Bean
    fun redisTemplate(): RedisTemplate<String, Any>{
        val redisTemplate = RedisTemplate<String, Any>()
        redisTemplate.setConnectionFactory(redisConnectionFactory())

        // key, value serializer 설정 안할시 redis-cli 에서 이진데이터로 표시됩
        redisTemplate.keySerializer = StringRedisSerializer()
        redisTemplate.valueSerializer = StringRedisSerializer()
        return redisTemplate
    }
}

유의 사항

  1. 코틀린에서는 프로퍼티 파일에서 변수를 가져올때 '$'를 이스케이프 해주어야 한다.
  2. serializer 설정은 레디스에 저장할때 들어가는 값의 형식을 결정한다. 설정하지 않을 시 jdk-serializer가 기본으로 들어가며 redis-cli 로 확인해보면 \xac\xed\x00\x05t\x00\x03key 와 같이 역직렬화할 수 있는 바이트 배열로 저장된다. 만약 문자열 형식으로 저장하려면 StringRedisSerializer 로 설정하고 JSON 형식으로 저장하려면 GenericJackson2JsonRedisSerializer 로 Serializer를 설정해주면 된다.

사용법(RedisTemplate, opsFor*)

만료기간 설정

// 기본 만료 기간 설정(초 단위)
redisTemplate.expire(key, sec)

// 만료 기간 설정(기간 단위까지 설정)
redisTemplate.expire(key, duration, TimeUnit)

Redis는 만료 기간 설정시 이미 만료 기간이 설정되어 있을 경우 원래 기간에 추가하는 방식이 아닌 초기화한다. 즉 만료 기간이 1분인 어떤 데이터에 다시 만료 기간이 1분을 설정한다면 1분이 추가되어 2분이 되는 것이 아니라 1분으로 초기화 된다.

0개의 댓글