2012-12-24 87 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 { 

請注意它會阻止整個Redis的事件循環(所有連接)違反BLPOP,只會阻止一個連接。

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

隨着BLPOP,你並不需要第二個線程,因爲你可以指定一個超時:

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

另一種方法,使Redis的反應遲鈍是發STOP和CONT信號。一旦你有實例的PID,只要啓動:

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

有了這個信號招Redis的實例的所有線程將被凍結(即不僅是事件循環)。這包括I/O後臺線程。

+0

啊哈! BLPOP與不存在的超時關鍵字正是我所需要的!謝謝! –