기록하는 습관

[Test] Redis 저장 (for vs. stream) 본문

개발/Test

[Test] Redis 저장 (for vs. stream)

로그뉴 2022. 7. 13. 11:36

redis에 데이터를 저장하기 위해 SortedSet에 데이터를 넣어야 한다.

이 때, 반복문을 사용할 때 list를 사용하는 것과 stream 중에 어떤 것이 더 빠를지 비교해보고자 한다.

 

@Test
@DisplayName("redis 관련 속도 측정 - for문")
void redisFor() {
    List<Boards> boardList = getS3Records("", (long) 1);
    RBatch rBatch = redisson.createBatch();
 
    for (Boards board : boardList) {
        rBatch.getScoredSortedSet("board1").addAsync(Double.parseDouble(board.getTitle()), board.getContent());
    }
}
 
@Test
@DisplayName("redis 관련 속도 측정 - stream")
void redisStream() {
    List<Boards> boardList = getS3Records("", (long) 1);
    RBatch rBatch = redisson.createBatch();
 
    boardList.stream().forEach(stream -> rBatch.getScoredSortedSet("board1").addAsync(Double.parseDouble(stream.getTitle()), stream.getContent()));
             
}
 
@Test
@DisplayName("redis 관련 속도 측정 - parallelStream")
void redisParallelStream() {
    List<Boards> boardList = getS3Records("", (long) 1);
    RBatch rBatch = redisson.createBatch();
 
    boardList.parallelStream().forEach(stream -> rBatch.getScoredSortedSet("board1").addAsync(Double.parseDouble(stream.getTitle()), stream.getContent()));
}


테스트 결과는 다음과 같다.

결론

현재 진행하는 작업은 filter를 사용하여 데이터 가공이 필요한 작업이 아니고, redis rBatch SortedSet에 데이터를 addAsync 하는 작업이기 때문에 parallelStream으로 진행한다. 또한, 테스트 결과 데이터가 많아질수록 parallelStream이 성능적으로 우수한 것을 확인했다.

 

sequential streams vs. pararalle streams

  • parallelStream은 개발자 모르게 내부적으로 스레드 풀을 만들어서 작업을 병렬화시킨다. 여기서 중요한 점은 parallelStream 별로 스레드풀을 만드는게 아니라는 점이다. 별도의 설정이 없다면 하나의 스레드 풀을 모든 parallelStream이 공유하게된다.

 

 

참고

'개발 > Test' 카테고리의 다른 글

[Test] Redis 조회 테스트  (0) 2022.07.13
테스트 자동화 (1) - Newman  (0) 2022.07.12
Comments