2012-12-24 5 views
3

저는 느린 Redis 서버를 모방하는 가장 간단한 방법을 찾고 있습니다 (지금 디버깅하고있는 클라이언트의 관점).느린 Redis 서버를 모방합니다.

이상적으로는 DEBUG SLEEP <seconds> 명령이지만 AFAIK는 없습니다.

블로킹 읽기에는 BLPOP을 사용할 수 있지만 블록을 해제하려면 별도의 스레드가 필요합니다 ... 더 간단한 방법이 있습니까?

답변

5

사실, 원하는대로 정확히 수행하는 디버그 절전 명령이 있습니다. 으로 debug.c 파일에 정의되어

} else if (!strcasecmp(c->argv[1]->ptr,"sleep") && c->argc == 3) { 
    double dtime = strtod(c->argv[2]->ptr,NULL); 
    long long utime = dtime*1000000; 

    usleep(utime); 
    addReply(c,shared.ok); 
} else { 

이 블록을 하나의 연결을 차단하는 것이라고를 BLPOP하는 전체 레디 스의 이벤트 루프 (모든 연결) 반대 유의하시기 바랍니다.

> ./redis-cli blpop dummy_key_which_does_not_exist 2 
... 2 seconds wait ... 
(nil) 

레디 스가 응답 할 수있는 또 다른 방법은 STOP 및 CONT 신호를 보내는 것입니다 : 당신이 타임 아웃을 지정할 수 있기 때문에

> ./redis-cli debug sleep 2 
... 2 seconds wait ... 
OK 

는 BLPOP으로, 당신은 두 번째 스레드가 필요하지 않습니다. 인스턴스의 PID를 갖게되면, 바로 시작 :

kill -STOP $pid 
sleep 1 
kill -CONT $pid 

을 레디 스 인스턴스의 모든 스레드가 동결 될 신호 트릭 (즉뿐만 아니라 이벤트 루프)와 함께. 여기에는 I/O 백그라운드 스레드가 포함됩니다.

+0

아하! 타임 아웃이있는 존재하는 BLPOP은 내가 필요한 것입니다! 감사! –

관련 문제