대머리개발자

R2DBC Redis... 본문

개발이야기/자봐

R2DBC Redis...

대머리개발자 2023. 2. 14. 13:09
728x90

끝도 없네.. 얻어 걸려야 하는데.... 젭압!!

 

리액티브 스타일(?) 맞춰 코딩을 하고 있는 건지 모르겠다.

일단 되는대로 코딩하고 있는데 이것이 바로 리액티브 스타일이 아니겠는가?

 

스트림 = 물 흐름대로 = 되는대로 ㅋㅋ 개똥 철학!!

 

그저 흘러 가자!!

 

아직까지 라이브러리가 완벽하게 지원되지 않는것 같다.

실제 인터페이스는 존재 하지만 사용해 보면 오류가 발생한다.

 

reactiveRedisOperations.opsForValue().getAndDelete( "1fb78c01-4a35-4751-bf24-3dad11b984f1")

//ㅜㅜ 
nested exception is io.lettuce.core.RedisCommandExecutionException: ERR unknown command 'GETDEL'

내가 잘못 사용하고 있는건가. ㅠ? 기본적인 인터페이스 제외하고는 다 안되네.. 일단 PASS

 

 

## 테스트 코드

ServiceUtil.getRedisService().getTest( "client:100000001").flatMap( data-> {
            // logic..
            return Mono.just(data);
}).subscribe();

레디스 가져온 정보가 없을 때 즉, NULL 일 때 flatMap은 흘러가지 않는다.

 

기본적으로 생각해보면 흘러가는 내용물이 없다면? 고인물이냐? ...ㅈㅅ

 

빈 내용물이라도 채워서 흘려 보내줘야 한다.

 

public Mono<String> getTest(String key){
        return reactiveRedisOperations.opsForValue().get(key)
                .switchIfEmpty(Mono.defer(()-> Mono.error(new DefinedException("redis info null : " + key))));
    }

 

switchIfEmpty 녀석을 통해서 빈 객체든 혹은 오류객체든 흘려 보내도록 하자! 또한 녀석의 비용이 비싼 관계로 무조건 흘려 보내는것이 아닌 조건에 맞을때만 흘려 보낼 수 있도록 defer()로 감싸 안아준다!

 

reactor.core.Exceptions$ErrorCallbackNotImplemented: com.oauth.common.DefinedException: redis info null : client:100000001
Caused by: com.oauth.common.DefinedException: redis info null : client:100000001

 

근데 보통 레디스에 없으면 뭐하뇨? DB를 가야제~    DB쪽으로 스트림을 꽂아 준다..

 

코드의 구조는 조금더 고민해봐야 할 듯...

 

결론.. 난해하다. 하지만 곧 익숙해진다!! ㅎㅎ

 

스트림이 NULL이면 구독할 필요가 없겠지?? 그래서 처리 과정에 중에 NULL 나오면 NULL 객체라도 만들어서 보내야 구독이 된다. NULL에 대한 처리가 없다면 구독 할수가 없다.

 

얼렁 성능 테스트 마무의리 해야 하는데. ㅠ

 

 

728x90

'개발이야기 > 자봐' 카테고리의 다른 글

boot azure-key-vault  (0) 2023.02.21
r2dbc Mysql and Maria  (0) 2023.02.19
JPA + queryDSL 적용기(?)  (0) 2022.04.08
스프링 Boot Jar 배포 시 리소스 못 찾는 이슈  (0) 2021.10.29
스프링 Boot - MessageSource 적용  (0) 2021.08.28