Single Thread Model
Redis는 대표적인 Single Thread Model 이다.
이로 인해 처리가 긴 Transaction이 발생했을 때, 다른 request는 처리하지 못할 수 있다.
대표적으로 flushAll 명령어는 리스트 전체를 Scan하는 구조로 100만개 처리시 1초,1000만개 처리시 10초, 1억개는 100초가 소요된다.
이를 예방하기 위해 데이터를 전체 하나의 Collection에 넣는 것이 아닌 여러 Collection 에 나눠 처리하는 방안이 좋으며 각 Collection당 보통 10000개의 데이터를 저장한다,
다른 예로 데이터를 백업하는 경우에, 앞서 AOF(메모리 덤프 및 디스크 저장)와 RDB(매번 디스크에 Write IO) 방식이 있는 것을 살펴 봤다.
이런 경우 대량의 데이터를 처리하는 경우 성능 저하를 발생하는 또다른 요인이기 때문에, 일반적으로 Master-Slave Model로 레디스를 구성하며 Master Redis는 데이터의 처리를 담당하며 slave redis에서 백업을 진행하는 것이 좋다.
출처: http://bcho.tistory.com/829
https://www.slideshare.net/charsyam2/redis-acc?ref=http://bcho.tistory.com/829
Redis Sing Thread를 회피하기 위해 Scan 을 예로 들 수 있는데 더 자세히 알고 싶다면, 카카오 기술 블로그에 작성된 강대명 개발자의 의견을 꼭 한번 읽어 보는 것을 추천한다.
http://tech.kakao.com/2016/03/11/redis-scan/
'Cloud & NoSQL & Middleware > Redis' 카테고리의 다른 글
Spring 에서 lettuce가 jedis 보다 많이 사용되는 이유 (0) | 2018.11.27 |
---|---|
Redis Library (2) | 2018.11.17 |
SpirngBoot에서 Redis 연동(Jedis) (0) | 2018.08.09 |
Redis 명령어 (0) | 2018.08.04 |
Redis Pub/Sub Model (0) | 2018.07.01 |