3
我正在尋找一種最簡單的方式來模仿緩慢的Redis服務器(從我正在調試的客戶端的角度來看)。模仿緩慢的Redis服務器
理想情況下,這將是一個DEBUG SLEEP <seconds>
命令,但AFAIK沒有這樣的事情。
我可以使用,例如,BLPOP
進行阻止讀取 - 但需要一個單獨的線程來解鎖它...有沒有更簡單的方法?
我正在尋找一種最簡單的方式來模仿緩慢的Redis服務器(從我正在調試的客戶端的角度來看)。模仿緩慢的Redis服務器
理想情況下,這將是一個DEBUG SLEEP <seconds>
命令,但AFAIK沒有這樣的事情。
我可以使用,例如,BLPOP
進行阻止讀取 - 但需要一個單獨的線程來解鎖它...有沒有更簡單的方法?
實際上,有一個調試睡眠命令,它正是你想要的。它在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後臺線程。
啊哈! BLPOP與不存在的超時關鍵字正是我所需要的!謝謝! –