복붙노트

[REDIS] 레디 스와 Node.js를 : 동기 또는 비동기?

REDIS

레디 스와 Node.js를 : 동기 또는 비동기?

내 응용 프로그램 (노드 / 표현 / 레디 스), 나는 동시에 DB에 여러 항목을 업데이트하는 몇 가지 코드를 사용 :

app.put('myaction', function(req, res){
    // delete stuff
    db.del("key1");
    db.srem("set1", "test");

    // Add stuff
    db.sadd("set2", "test2");
    db.sadd("set3", "test3");
    db.hmset("hash1", "k11", "v11", "k21", "v21");
    db.hmset("hash2", "k12", "v12", "k22", "v22");
    // ...

    // Send response back
    res.writeHead(200, {'content-type': 'application/json'});
    res.write(JSON.stringify({ "status" : "ok" }));

    res.end(); 
});

나는 모든 동작이 메소드가 복귀하기 전에 수행됩니다 확신 할 수 있습니까? 내 관심사는 비동기 처리합니다. 제가 DB 작업에 콜백 기능을 사용하지 않기 때문에,이 괜찮 될 것인가?

해결법

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

    1.당신의 명령 큐를 생성 및 행을 실행하기 위해 MULTI / EXEC 명령을 사용하십시오. 그리고 일관된 응답 다시 (성공 / 실패)를 전송하기 위해 콜백을 사용합니다. 충돌의 경우에 - - 당신이 것을 방지하기 위해 레디 스 'AOF를 사용해야합니다 큐에있는 명령의 일부가 실행 되었기 때문에 DB 상태가 논리와 응집성되지는 : 즉 MULTI / EXEC는 실행시 트랜잭션이 아니다. 이것은 유용한 참고 자료입니다.

    당신의 명령 큐를 생성 및 행을 실행하기 위해 MULTI / EXEC 명령을 사용하십시오. 그리고 일관된 응답 다시 (성공 / 실패)를 전송하기 위해 콜백을 사용합니다. 충돌의 경우에 - - 당신이 것을 방지하기 위해 레디 스 'AOF를 사용해야합니다 큐에있는 명령의 일부가 실행 되었기 때문에 DB 상태가 논리와 응집성되지는 : 즉 MULTI / EXEC는 실행시 트랜잭션이 아니다. 이것은 유용한 참고 자료입니다.

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

    2.모든 명령을 보낸 후 응답이 비동기 구문 분석하는 동안, 그것은 모든 콜백 위해 호출되는 것을주의하는 것이 유용합니다. 그래서 당신은 클라이언트에 응답을 보낼 수있는 마지막 레디 스 명령의 콜백을 사용할 수 있으며, 다음은 레디 스의 모든 명령이 응답하기 전에 실행 된 것을 알 수 있습니다.

    모든 명령을 보낸 후 응답이 비동기 구문 분석하는 동안, 그것은 모든 콜백 위해 호출되는 것을주의하는 것이 유용합니다. 그래서 당신은 클라이언트에 응답을 보낼 수있는 마지막 레디 스 명령의 콜백을 사용할 수 있으며, 다음은 레디 스의 모든 명령이 응답하기 전에 실행 된 것을 알 수 있습니다.

  3. ==============================

    3.나는 레디 스 함께 일하지 않은,하지만이 작품 (당신이 경우 정의되지 않은 함수를 호출하지 않음)과는 비동기 할 필요가있는 경우에, 당신은 그것을 사용할 수 있습니다. 업데이트에 오류가 경우에, 당신은이 방법을 처리 할 수 ​​없습니다.

    나는 레디 스 함께 일하지 않은,하지만이 작품 (당신이 경우 정의되지 않은 함수를 호출하지 않음)과는 비동기 할 필요가있는 경우에, 당신은 그것을 사용할 수 있습니다. 업데이트에 오류가 경우에, 당신은이 방법을 처리 할 수 ​​없습니다.

  4. ==============================

    4.당신의 레디 스 서버가 중단 될 수 있기 때문에 모든 행동이 성공적으로 완료하면 아니, 당신은 최대 속도 것들에 .. 확신 할 수 없다 그룹화 할 수 있습니다 파이프 라이닝 하나에 모든 업데이트 명령, 다음 (당신의 레디 스 드라이버 지원이를? 않습니다) 콜백을 통해 성공 또는 전체 작업의 실패를 얻을 진행 ...

    당신의 레디 스 서버가 중단 될 수 있기 때문에 모든 행동이 성공적으로 완료하면 아니, 당신은 최대 속도 것들에 .. 확신 할 수 없다 그룹화 할 수 있습니다 파이프 라이닝 하나에 모든 업데이트 명령, 다음 (당신의 레디 스 드라이버 지원이를? 않습니다) 콜백을 통해 성공 또는 전체 작업의 실패를 얻을 진행 ...

  5. from https://stackoverflow.com/questions/7992627/node-js-with-redis-synchronous-or-asynchronous by cc-by-sa and MIT license