Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模仿慢速Redis服务器_Redis_Autotest - Fatal编程技术网

模仿慢速Redis服务器

模仿慢速Redis服务器,redis,autotest,Redis,Autotest,我正在寻找一种最简单的方法来模拟速度较慢的Redis服务器(从我现在调试的客户机的角度来看) 理想情况下,它将是一个调试睡眠命令,但恐怕没有这样的东西 我可以使用,比如说,BLPOP进行阻塞读取-但这需要一个单独的线程来解除阻塞。。。有更简单的方法吗?事实上,有一个调试睡眠命令,它可以完全满足您的需要。它在debug.c文件中定义为: } else if (!strcasecmp(c->argv[1]->ptr,"sleep") && c->argc == 3)

我正在寻找一种最简单的方法来模拟速度较慢的Redis服务器(从我现在调试的客户机的角度来看)

理想情况下,它将是一个
调试睡眠
命令,但恐怕没有这样的东西


我可以使用,比如说,
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无响应的方法是发送停止和继续信号。获得实例的pid后,只需启动:

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

使用此信号技巧,redis实例的所有线程都将被冻结(即,不仅是事件循环)。这包括I/O后台线程。

Aha!BLPOP在不存在的键上超时正是我需要的!谢谢这是一个已经很好的答案。我还没有测试“客户端暂停”(client pause),但它可能会起作用