2013-04-07 74 views
4
$ cat mass_insert.txt 
*3 
$3 
SET 
$4 
key1 
$6 
value1 
*3 
$3 
SET 
$4 
key2 
$6 
value2 
$ cat mass_insert.txt | nc localhost 6379 

如果你看到,我在一個文件mass_insert.text大衆插入Redis命令,我把它cat到的netcat和指令被髮送到精細的Redis但反應不傾倒。問題是爲什麼?爲什麼netcat不會轉儲響應?

netcat簡單google.com HEAD請求的作品就好了,即,轉儲的響應 -

$ printf "HEAD/HTTP/1.0\r\n\r\n" | nc google.com 80 
HTTP/1.0 302 Found 
Location: http://www.google.co.in/ 
Cache-Control: private 
Content-Type: text/html; charset=UTF-8 
Set-Cookie: PREF=ID=cac6fac8de9b5d0c:FF=0:TM=1365352115:LM=1365352115:S=CVuSzOK8mrsfFczI; expires=Tue, 07-Apr-2015 16:28:35 GMT; path=/; domain=.google.com 
Set-Cookie: NID=67=K5KjAFxuDP5epZKDdvSf4oCe4FRP1AL8LG_9MEdsArn4Oz_UBG69H0KOMUiKLuVN-hH4NIUvHOLgmfh_82P5v6Nh-sGFrGXyCnQz0zD-Sj_QbzxQ6NIK0rahsxjvyTn7; expires=Mon, 07-Oct-2013 16:28:35 GMT; path=/; domain=.google.com; HttpOnly 
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." 
Date: Sun, 07 Apr 2013 16:28:35 GMT 
Server: gws 
Content-Length: 221 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: SAMEORIGIN 
+0

什麼輸出添加'-vv'到你的NC命令給你?在運行你的nc命令後,'echo $?'是什麼意思? – craig65535 2013-04-08 00:53:48

+0

http://pastie.org/7360305 – user1437328 2013-04-08 04:10:25

+0

'nc -h'給你什麼版本? (第一行輸出) – craig65535 2013-04-08 04:44:57

回答

6

您可能要檢查以下幾點。

首先,Redis協議中的行分隔符是\ r \ n(而不僅僅是\ n)。所以你需要確保你的輸入文件包含這些字符。

然後,netcat關閉輸入文件末尾的連接(因此可能不會等待Redis應答)。它可能取決於netcat的版本。在我的系統上:

$ od -c toto.txt 
0000000 * 3 \n $ 3 \n S E T \n $ 4 \n k e y 
0000020 1 \n $ 6 \n v a l u e 1 \n * 3 \n $ 
0000040 3 \n S E T \n $ 4 \n k e y 2 \n $ 6 
0000060 \n v a l u e 2 \n 

$ (sed 's/$/\r/' < toto.txt ; sleep 1) | netcat localhost 6379 
+OK 
+OK 

額外的第二項讓netcat有機會閱讀Redis的回覆。

請注意,--pipe模式下的redis-cli比netcat更適合通過Redis協議執行大量注入。

相關問題