본문 바로가기

Spring

Spring boot : redis 기본 설정

redis 사이트에서 windows 사용 시 ubuntu로 설치를 해야 하기 때문에 ubuntu version을, mac 사용 시 macOs 버전을 설치해 주면 된다.

 

build.gradle

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

 

application.yml

spring:
  redis:
    host: localhost // 배포하게 된다면 배포된 서버의 endpoint로
    port: 6379
    password: 필요는 없겠지만, 만약 비밀번호를 설정해준다면 작성

 

RedisConfig.java

@Configuration
public class RedisConfig {
    // Redis 호스트 및 포트
    @Value("${spring.data.redis.host}")
    private String redisHost;
    @Value("${spring.data.redis.port}")
    private int redisPort;

    // Redis 연결 팩토리 빈 설정
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(redisHost, redisPort);
    }

    // Redis 템플릿 빈 설정
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setDefaultSerializer(RedisSerializer.string());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }

	//리스너어댑터 설정
    @Bean
    MessageListenerAdapter messageListenerConverter() {
        return new MessageListenerAdapter(new RedisSubService());
    }

    // Redis 메시지 리스너 컨테이너 빈 설정
    @Bean
    public RedisMessageListenerContainer redisMessageListener(RedisConnectionFactory connectionFactory){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(messageListenerConverter(), topic());
        return container;
    }
    
    //pre, sub 용 채널 설정
    @Bean
    ChannelTopic topic() {
        return new ChannelTopic("topic1");
    }
}

 

RedisUtil.java

@Component
@RequiredArgsConstructor
public class RedisUtil {
	//Redis에 접근하기 위한 Spring의 Redis 템플릿 클래스
	private final StringRedisTemplate redisTemplate;

	//지정된 키(key)에 해당하는 데이터를 Redis에서 가져오는 메서드
	public String getData(String key) { 
		ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
		return valueOperations.get(key);
	}

	//지정된 키(key)에 값을 저장하는 메서드
	public void setData(String key, String value) { 
		ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
		valueOperations.set(key, value);
	}

	//지정된 키(key)에 값을 저장하고, 지정된 시간(duration) 후에 데이터가 만료되도록 설정하는 메서드
	public void setDataExpire(String key, String value, long duration) {
		ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
		Duration expireDuration = Duration.ofSeconds(duration);
		valueOperations.set(key, value, expireDuration);
	}

	//지정된 키(key)에 해당하는 데이터를 Redis에서 삭제하는 메서드
	public void deleteData(String key) {
		redisTemplate.delete(key);
	}
}

 

Message.java

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessage {
    private String sender;
    private String context;
}