복붙노트

[REDIS] 나는 파일 / 모듈 간의 레디 스 연결을 공유해야 하는가?

REDIS

나는 파일 / 모듈 간의 레디 스 연결을 공유해야 하는가?

나는 Node.js를 응용 프로그램을 개발 그리고 난 무거운 레디 스 사용을 필요로입니다. 이 앱은 8 개 CPU 코어를 통해 클러스터됩니다.

CPU 당 모든 노동자 ( '레디 스')를 필요로 실행 여러 모듈을 가지고 있기 때문에 지금은 레디 스에 100 개 개의 동시 연결을해야합니다. createClient을 ().

시나리오 A :

file1.js :

var redis = require('redis').createClient();

file2.js

var redis = require('redis').createClient();

시나리오 B :

redis.js

var redis = require('redis').createClient();

module.exports = redis;

file1.js

var redis = require('./redis');

file2.js

var redis = require('./redis');

어떤 접근 방식은 더 : 내가 소개하는 모든 새로운 파일 (시나리오 A)의 새로운 레디 스 인스턴스를 만들거나 전 세계적으로 (시나리오 B)를 하나의 레디 스 연결을 생성하고 내가 가진 모든 모듈에서이 연결을 공유. 각 솔루션의 단점 / 장점은 무엇입니까?

사전에 감사합니다!

해결법

  1. ==============================

    1.나는 이와 같은 문제에 직면 할 때 나는 일반적으로 세 가지 기본적인 질문에 대해 생각합니다.

    나는 이와 같은 문제에 직면 할 때 나는 일반적으로 세 가지 기본적인 질문에 대해 생각합니다.

    반드시이 순서는 시나리오에 따라 달라집니다,하지만 난이 모든 질문에 세 가지 옵션 B의 찬성이 경우 생각으로 혹시 createClient 옵션을 수정하는 데 필요한 경우, 당신은 다음을 사용하는 모든 파일에 편집 그들에게 필요합니다. 옵션 A의 어느 레디 스를 사용하는 모든 파일이며, 옵션 B는 redis.js입니다. 새로운 또는 다른 제품이 나오고 당신은 레디 스를 대체 할 또한 경우는 다른 패키지 또는 실질적으로 변환 시간을 삭감 클라이언트 레디 스도 새에 대한 redis.js에게 래퍼를 만들기 위해 가능한 것입니다.

    전역은 일반적으로 나쁜 일이지만,이 예에서 redis.js가 변경 가능한 상태를 저장하지 않아야하므로 이러한 맥락에서 글로벌 / 싱글을 가지고 아무 문제가 없다.

  2. ==============================

    2.그 문제가되지 않습니다 그래서 노드와 레디 스 둘 다 꽤 잘 연결을 많이 처리 할 수 ​​있습니다.

    그 문제가되지 않습니다 그래서 노드와 레디 스 둘 다 꽤 잘 연결을 많이 처리 할 수 ​​있습니다.

    당신이 설정하는 연결의 수는 (응용 프로그램이 시작된 후, 연결 수가 일정 것이라는 의미에서) 제한됩니다 귀하의 상황에서, 당신은 응용 프로그램의 시작시 레디 스 연결을 만드는.

    당신이 원하는 것 상황은 동일한 연결하면 모든 요청에 ​​대해 질의 레디 스 필요는 HTTP 서버와 예를 들어, 매우 역동적 인 상황에 다시 사용할 수 있습니다. 각 요청에 대한 새 연결 만들기 자원 (작성 및 연결 모든 시간을 파괴) 및 각 요청에 대한 하나 개의 연결이 바람직 할 것이다 재사용의 낭비 일 것이다.

    두 시나리오에있는 내가 선호하는 것입니다, 나는 대본 자신쪽으로 기울고 있어요.

  3. from https://stackoverflow.com/questions/16616381/should-i-share-redis-connection-between-files-modules by cc-by-sa and MIT license