복붙노트

[REDIS] Node.js를, (안녕) 레디 스 및 멀티 명령

REDIS

Node.js를, (안녕) 레디 스 및 멀티 명령

나는 Node.js를하고 레디 스 놀아있어하고이 명령을 통해 라이브러리를 hiredis 설치된

npm install hiredis redis

나는 여기에 여러 예제를 보았다 :

https://github.com/mranney/node_redis/blob/master/examples/multi2.js

라인 (17)에 그것은 말한다

// you can re-run the same transaction if you like

어떤 명령이 실행이 완료되면 내부 multi.queue 개체가 삭제되지 않습니다 것을 의미한다.

내 질문은 : 어떻게 당신은 HTTP 환경에서 상황을 처리까요? 예를 들어, (그것은 단지 하나 개의 명령을 실행으로이 정말 멀티 필요하지 않습니다하지만 쉽게 따라하기의) 마지막으로 연결된 사용자를 추적

var http = require('http');
redis = require('redis');

client = redis.createClient()
multi = client.multi();

http.createServer(function (request, response) {
  multi.set('lastconnected', request.ip); // won't work, just an example
  multi.exec(function(err, replies) {
      console.log(replies);
  });
});

이 경우는 제 multi.exec 연결된 사용자 1 트랜잭션 및 (내부 multi.queue 객체가 해제하지 않기 때문에) 100 (100) 사용자의 트랜잭션을 실행할 것이다.

옵션 1 :해야 내가 effectivly 함수의 실행의 끝에서 죽일 것 http.createServer 콜백 함수 내부의 다중 객체를 생성? 얼마나 비싼 CPU 사이클의 관점에서 만들고이 객체 BE의 파괴 것?

옵션 2 : 다른 옵션) (multi.exec의 새 버전을 생성하는 것, 대기열을 취소합니다 multi.execAndClear 같은 ()가 현재 실행 레디 스 명령의 무리가.

당신은 어떤 옵션을 걸릴 것? 나는 옵션 하나가 더 생각 - 우리는 하나 개의 객체를 죽이고있어 대신 체리는 그것의 부분을 따기 - 난 그냥 노드와 자바 스크립트 모두 새로운 브랜드 해요 확인과 같이되고 싶어요.

해결법

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

    1.node_redis의 다중 객체 생성하기가 매우 저렴합니다. 부작용으로, 나는 당신이 그들을 다시 사용할 수 있도록 재미있을 것이라고 생각하지만, 이것은 분명히 어떤 상황에서 유용하다. 가서 새로운 다중 객체에게 새 트랜잭션을 필요로 할 때마다 만들 수 있습니다.

    node_redis의 다중 객체 생성하기가 매우 저렴합니다. 부작용으로, 나는 당신이 그들을 다시 사용할 수 있도록 재미있을 것이라고 생각하지만, 이것은 분명히 어떤 상황에서 유용하다. 가서 새로운 다중 객체에게 새 트랜잭션을 필요로 할 때마다 만들 수 있습니다.

    한 가지 유념해야 할 것은 당신이 실제로 레디 스 서버에 원자 적으로 실행하는 모든 작업이 필요한 경우에만 멀티 사용해야한다는 것입니다. 방금 효율적으로 네트워크 대역폭을 저장하고 관리 할 수있는 콜백의 수를 줄이기위한 일련의 명령까지 배치하고 싶은 경우에, 다만 개별 명령, 다른 후 하나를 보냅니다. node_redis 자동으로 "파이프 라인"의 순서로 서버에 이러한 요청, 개별 명령 콜백 (있는 경우) 순서로 호출됩니다 것입니다.

  2. from https://stackoverflow.com/questions/4970727/node-js-hiredis-and-the-multi-command by cc-by-sa and MIT license