heroku redis 사용해서 spring boot에 적용하기

코딩을 합시다·2023년 2월 3일
0

heroku 설치
$ sudo snap install heroku --classic

헤로쿠 버전확인
$ heroku --version

헤로쿠 로그인
$heroku login -i
-> (heroku 로그인, 비밀번호 API Key를 사용해야함 API Key는 heroku 홈페이지의 Account Settings에 들어가서 확인할 수 있다.)

헤로쿠 url 확인
$ heroku config -a {redis이름}
-> (url 확인, spring boot로 접속할때 REDIS_URL을 사용)

헤로쿠 redis 접속
$ heroku redis:cli -a {redis이름}
-> 접속

heroku 명령어
keys * //전체 데이터 보여줌
get USER:012 //get key이름 하면 value 보여줌
FLUSHALL // 데이터 전부삭제

spring boot에 아래 파일들을 추가해준다


build.gradle

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

application.yml

spring:
    redis:
        host: {REDIS_URL}

RedisConfig.java

@Configuration
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;

    @Bean //ConnectionFactory 빈으로 등록
    public RedisConnectionFactory redisConnectionFactory() {

        //RedisProperties 에서 application.properties에서 설정한 URL을 가져온다
        RedisURI redisURI = RedisURI.create(host);

        // URI를 가지고 Configuration을 만들어 준 다음에
        // Connection을 만들어주는 factory를 만들어 factory를 반환한다
        org.springframework.data.redis.connection.RedisConfiguration configuration = LettuceConnectionFactory.createRedisConfiguration(redisURI);

        //Lettuce는 전통적인 제디스보다 나중에 나왔고 성능이 더 좋아서 사용한다
        LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration);

        // Initializing 된다
        factory.afterPropertiesSet();

        return factory;
    }

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

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

RedisController.java

@RequiredArgsConstructor
@RestController
public class RedisController {

    private final RedisService redisService;

//    @PostMapping("/test")
//    public void test(@RequestBody ChatMessage chatMessage) {
//        redisPubService.sendMessage(chatMessage);
//    }
    @PostMapping("/test")
    public String test(@RequestBody RedisRequestDto requestDto) {
        String value = redisService.redisString(requestDto);
        return "벨류는 " + value;
    }
}

RedisRequestDto.java

@Getter
@NoArgsConstructor
public class RedisRequestDto {
    private String name;
    private String value;
}

RedisService.java


@Slf4j
@RequiredArgsConstructor
@Service
public class RedisService {

    private final RedisTemplate<String, Object> redisTemplate;

    public String redisString(RedisRequestDto requestDto) {
        ValueOperations<String, Object> operations = redisTemplate.opsForValue();
        operations.set(requestDto.getName(), requestDto.getValue());
        String redis = (String)operations.get(requestDto.getName());
        return redis;
    }
}

postman을 통해 테스트 해보면 데이터가 잘 들어와 있는걸 확인 할 수 있다.

0개의 댓글