删除睡眠后Redis管道无法正常工作

时间:2019-09-16 18:31:58

标签: redis

我正在阅读有关redis管道的文章,其中看到了基本示例。

以下命令按预期运行。

(printf "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379

输出:

+PONG
+PONG
+PONG

但是当我取消睡眠时,该命令不会给我任何结果。

(printf "PING\r\nPING\r\nPING\r\n";) | nc localhost 6379

我无法理解此处的行为。
任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

在管道(|)之前的命令时,例如(printf "PING\r\nPING\r\nPING\r\n";)完成后,它向nc命令发送 EOF nc将关闭与Redis的连接,然后退出。但是,在nc退出之前,它可能尚未收到Redis的回复。

为了确保nc收到Redis的响应并将其输出,在printf请求之后,它会休眠一段时间,例如sleep 1。通常,nc可以在1秒内收到Redis的响应。这样您就可以看到输出。