我正在阅读有关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
我无法理解此处的行为。
任何帮助将不胜感激。
答案 0 :(得分:3)
在管道(|
)之前的命令时,例如(printf "PING\r\nPING\r\nPING\r\n";)
完成后,它向nc
命令发送 EOF ,nc
将关闭与Redis的连接,然后退出。但是,在nc
退出之前,它可能尚未收到Redis的回复。
为了确保nc
收到Redis的响应并将其输出,在printf
请求之后,它会休眠一段时间,例如sleep 1
。通常,nc
可以在1
秒内收到Redis的响应。这样您就可以看到输出。