저는 redis连接数과 redis性能의 관계에 대해 항상 막연하게 이해하고 있었습니다. redis가 단일 프로세스, 단일 스레드라는 것은 알고 있지만 자세한 내용은 모르겠습니다. 몇 가지 정보를 확인했습니다. 해당 기간 동안 원하는 답변을 찾지 못했는데 자세한 설명이나 링크를 알려주세요
Redis는 단일 스레드입니다. 여러 CPU/코어를 어떻게 활용할 수 있나요? 일반적으로 Redis는 메모리나 네트워크에 바인딩되어 있으므로 CPU가 Redis에서 병목 현상을 일으킬 가능성은 거의 없습니다. 예를 들어, 평균 Linux 시스템에서 실행되는 Redis 파이프라인을 사용하면 초당 500,000개의 요청도 전달할 수 있으므로 애플리케이션이 주로 O(N) 또는 O(log(N)) 명령을 사용하는 경우 CPU를 너무 많이 사용하지 않습니다. 그러나 CPU 사용량을 최대화하려면 동일한 상자에서 Redis의 여러 인스턴스를 시작하고 이를 다른 서버로 처리할 수 있습니다. 어떤 시점에서는 단일 상자만으로는 충분하지 않을 수 있으므로 여러 CPU를 사용하려는 경우 더 일찍 샤딩하는 방법을 생각해 볼 수 있습니다. 파티셔닝 페이지에서 여러 Redis 인스턴스 사용에 대한 자세한 내용을 확인할 수 있습니다.
Redis는 내부적으로 다중화 IO인 epoll 기술을 사용합니다. 연결 수가 매우 많으면 처리 성능이 향상되고 Redis는 컨텍스트 전환을 피하기 위해 단일 스레드입니다.
Redis는 단일 스레드입니다. 여러 CPU/코어를 어떻게 활용할 수 있나요?
일반적으로 Redis는 메모리나 네트워크에 바인딩되어 있으므로 CPU가 Redis에서 병목 현상을 일으킬 가능성은 거의 없습니다. 예를 들어, 평균 Linux 시스템에서 실행되는 Redis 파이프라인을 사용하면 초당 500,000개의 요청도 전달할 수 있으므로 애플리케이션이 주로 O(N) 또는 O(log(N)) 명령을 사용하는 경우 CPU를 너무 많이 사용하지 않습니다.
그러나 CPU 사용량을 최대화하려면 동일한 상자에서 Redis의 여러 인스턴스를 시작하고 이를 다른 서버로 처리할 수 있습니다. 어떤 시점에서는 단일 상자만으로는 충분하지 않을 수 있으므로 여러 CPU를 사용하려는 경우 더 일찍 샤딩하는 방법을 생각해 볼 수 있습니다.
파티셔닝 페이지에서 여러 Redis 인스턴스 사용에 대한 자세한 내용을 확인할 수 있습니다.
FAQ
여러 Redis 클라이언트는 많은 IO 오버헤드를 발생시킵니다. 각 노드 간의 데이터 교환은 Ehcache만큼 복잡하지 않습니다. 하하