[Redis] Spring 3.x Redis DB 사용

경민·2024년 5월 13일

Redis

목록 보기
2/4
post-thumbnail

Redis 셋팅을 정리해두자.

환경

JDK: 17
Spring Boot: 3.2.5
Redis: 3.2.4


의존성

implementation 'org.springframework.boot:spring-boot-starter-data-redis:3.2.4'

.yml

spring:
  redis:
    host: localhost
    port: 6379

설정

RedisConfig.java

@Configuration
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;


    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(host, port);
    }

    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(this.redisConnectionFactory());

		// key, value, hashKey, hashValue, 그 외 모든 데이터를 직렬화
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setDefaultSerializer(new StringRedisSerializer());

        return redisTemplate;
    }
}

Redis를 DB로 사용하는 방법은 2가지로 나뉜다.

  1. Repository
  2. RedisTemplate

1.Repository

Repository를 사용하면, Entity를 설정해야 한다.
Token.java

@Data
@RedisHash(value = "token") // key값 prefix
public class Token {

    @Id // key
    private String authId;

    @Indexed // index 적용
    private String token;

    @TimeToLive // 만료시간
    private long ttl;

}

JpaRepository를 사용하는 것과 유사하게 CrudRepository를 상속 받는다.
TokenRepository.java

public interface TokenRepository extends CrudRepository<Token, String> {}


2. RedisTemplate

@Service
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setData(String key, String value, long expiredTime) {
        redisTemplate.opsForValue().set(key, value, expiredTime, TimeUnit.MILLISECONDS); // 시간 단위까지 지정
    }

    public String getData(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public void deleteData(String key) {
        redisTemplate.delete(key);
    }

}

RedisTemplate의 함수마다 자료구조가 다르기 때문에
적절한 자료구조에 따라 함수를 호출하면 된다.

profile
안녕하세요

0개의 댓글