2014-01-22 7 views
1

포트 6379에서 Redis 서버에 텔넷 할 때 http://redis.io/topics/protocol에 설명 된 프로토콜 사양을 사용할 수 있어야합니다. 대신 잘못된 일괄 길이가 표시됩니다. 초기 * 3 (프로토콜 사양을 시작한 후)에 넣은 값은이 오류를 반환합니다. 심지어프로토콜 사양을 사용하여 Redis에 쓸 수 없습니다.

telnet localhost 6379 
Trying ::1... 
telnet: connect to address ::1: Connection refused 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
*3\r\n$5\r\nLPUSH\r\n$4\r\nlogs\r\n$20\r\n"this is some data!"\r\n 
-ERR Protocol error: invalid multibulk length 
Connection closed by foreign host. 

을뿐만 아니라 :

나는 레디 스 2.6 오전
telnet localhost 6379 
Trying ::1... 
telnet: connect to address ::1: Connection refused 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
*3\r\n 
-ERR Protocol error: invalid multibulk length 
Connection closed by foreign host. 

(레디 스 서버 V = 2.6.13 나는 수세 리눅스 엔터프라이즈 예를 들어 11

에 배쉬를 사용하고) 프로토콜 사양을 지원해야합니다. 무엇이 잘못 될 수 있습니까? 미리 감사드립니다. 콜

답변

1

\ r \ n은 텔넷으로 해석되지 않습니다. 그것들은 캐리지 리턴과 줄 바꿈 (linefeed)을 의미하며, 텔넷 프로토콜의 일부일뿐입니다. 텔넷에서 생성하려면 "Enter"를 누르십시오.

$ telnet 127.0.0.1 6379 
Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 
*3 
$5 
LPUSH 
$4 
logs 
$20 
"this is some data!" 
:1 
quit 
+OK 

차라리 쉘 스크립트에서 직접 레디 스 프로토콜을 처리하는 것보다 레디 스에 액세스 할 수있는 펄/파이썬/루비/PHP/... 스크립트를 사용하는 것이 좋습니다.

+0

텔넷에 이미 내장되어있는 경우 캐리지 리턴 및 줄 바꿈이 발생하지 않았습니다. 내가 실제로하려고하는 것은 6379 번 포트를 통해 파이프를 연결하고이 경우 syslog-ng를 사용하여 포트에 쓰는 것입니다. 나는 또한 echo "* 3 \ r \ n $ 5 \ r \ nLPUSH \ r \ n $ 4 \ r \ nlogs \ r \ n $ 17 \ r \ n과 같은 것을 시도했다. redis-cli - bash 내의 파이프와 같은 오류가 발생합니다. 다음 질문은 캐리지 리턴 및 줄 바꿈 인라인을 다시 시작하는 방법에 관한 것입니다. –

+0

syslog-ng의 경우에는 \ r \ n을 잘 해석합니다. http://benwilber.net/realtime-pixel-tracking-nginx-syslog-ng-redis –

+0

redis-cli --pipe의 경우에는 모두 다릅니다. 당신의 껍질에. bash를 사용하면 echo -n $ 'hello \ r \ nhello \ r \ n'을 사용하여 문자를 올바르게 확장 할 수 있습니다 - http://stackoverflow.com/questions/13195341/how-to-use-redis-mass를 참조하십시오. -insertion/13195609 # 13195609 –

관련 문제