2013-04-07 6 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 

Если вы видите, у меня есть REDIS команды для массовой вставки в файл mass_insert.text я cat его Netcat и команды присылают штраф Redis, но ответ не сбрасывается. Вопрос: ПОЧЕМУ?Почему netcat не сбрасывает ответ?

Простой google.com ГОЛОВКА запрос с netcat работает нормально, то есть сбрасывает ответ -

$ 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? Что говорит 'echo $?' После запуска вашей команды nc? – craig65535

+0

http://pastie.org/7360305 – user1437328

+0

Какая версия 'nc -h' вам дает? (Первая строка вывода) – craig65535

ответ

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.

Обратите внимание, что redis-cli in -pipe mode намного лучше, чем netcat, для выполнения массивных инъекций по протоколу Redis.

Смежные вопросы