[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.당신의 명령 큐를 생성 및 행을 실행하기 위해 MULTI / EXEC 명령을 사용하십시오. 그리고 일관된 응답 다시 (성공 / 실패)를 전송하기 위해 콜백을 사용합니다. 충돌의 경우에 - - 당신이 것을 방지하기 위해 레디 스 'AOF를 사용해야합니다 큐에있는 명령의 일부가 실행 되었기 때문에 DB 상태가 논리와 응집성되지는 : 즉 MULTI / EXEC는 실행시 트랜잭션이 아니다. 이것은 유용한 참고 자료입니다.
당신의 명령 큐를 생성 및 행을 실행하기 위해 MULTI / EXEC 명령을 사용하십시오. 그리고 일관된 응답 다시 (성공 / 실패)를 전송하기 위해 콜백을 사용합니다. 충돌의 경우에 - - 당신이 것을 방지하기 위해 레디 스 'AOF를 사용해야합니다 큐에있는 명령의 일부가 실행 되었기 때문에 DB 상태가 논리와 응집성되지는 : 즉 MULTI / EXEC는 실행시 트랜잭션이 아니다. 이것은 유용한 참고 자료입니다.
-
==============================
2.모든 명령을 보낸 후 응답이 비동기 구문 분석하는 동안, 그것은 모든 콜백 위해 호출되는 것을주의하는 것이 유용합니다. 그래서 당신은 클라이언트에 응답을 보낼 수있는 마지막 레디 스 명령의 콜백을 사용할 수 있으며, 다음은 레디 스의 모든 명령이 응답하기 전에 실행 된 것을 알 수 있습니다.
모든 명령을 보낸 후 응답이 비동기 구문 분석하는 동안, 그것은 모든 콜백 위해 호출되는 것을주의하는 것이 유용합니다. 그래서 당신은 클라이언트에 응답을 보낼 수있는 마지막 레디 스 명령의 콜백을 사용할 수 있으며, 다음은 레디 스의 모든 명령이 응답하기 전에 실행 된 것을 알 수 있습니다.
-
==============================
3.나는 레디 스 함께 일하지 않은,하지만이 작품 (당신이 경우 정의되지 않은 함수를 호출하지 않음)과는 비동기 할 필요가있는 경우에, 당신은 그것을 사용할 수 있습니다. 업데이트에 오류가 경우에, 당신은이 방법을 처리 할 수 없습니다.
나는 레디 스 함께 일하지 않은,하지만이 작품 (당신이 경우 정의되지 않은 함수를 호출하지 않음)과는 비동기 할 필요가있는 경우에, 당신은 그것을 사용할 수 있습니다. 업데이트에 오류가 경우에, 당신은이 방법을 처리 할 수 없습니다.
-
==============================
4.당신의 레디 스 서버가 중단 될 수 있기 때문에 모든 행동이 성공적으로 완료하면 아니, 당신은 최대 속도 것들에 .. 확신 할 수 없다 그룹화 할 수 있습니다 파이프 라이닝 하나에 모든 업데이트 명령, 다음 (당신의 레디 스 드라이버 지원이를? 않습니다) 콜백을 통해 성공 또는 전체 작업의 실패를 얻을 진행 ...
당신의 레디 스 서버가 중단 될 수 있기 때문에 모든 행동이 성공적으로 완료하면 아니, 당신은 최대 속도 것들에 .. 확신 할 수 없다 그룹화 할 수 있습니다 파이프 라이닝 하나에 모든 업데이트 명령, 다음 (당신의 레디 스 드라이버 지원이를? 않습니다) 콜백을 통해 성공 또는 전체 작업의 실패를 얻을 진행 ...
from https://stackoverflow.com/questions/7992627/node-js-with-redis-synchronous-or-asynchronous by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] springboot2.0에서 @cacheable 사용하는 경우 어떻게 각 레디 스 캐시에 대해 다른 TTL을 구성 할 수 (0) | 2020.01.24 |
---|---|
[REDIS] 스프링 데이터 레디 스 마스터 슬레이브 구성 (0) | 2020.01.24 |
[REDIS] StackExchange TimeoutException는 레디 스에서 2 개 세트에 750 개 항목을 삽입 할 때 (0) | 2020.01.24 |
[REDIS] PHP + 레디 스 + 펍에서 실시간 채팅 / 하위 + WebSocket을 (+ NodeJS) (0) | 2020.01.24 |
[REDIS] 레디 스 해시 매김 (0) | 2020.01.24 |