Redis) 이것이 레디스다 7 - 레디스 프로토콜

레디스 프로토콜을 통해 모든 명령을 수신한다.
데이터 통신을 위한 채널은 TCP/IP이며 포트는 redis.conf의 port를 사용한다.

프로토콜 구조

레디스 프로토콜은 binary-safe 하다. 즉, 전송되는 데이터에 의해 프로토콜이 오작동을 일으키지 않는다.
(줄바꿈 문자로 인해 데이터를 모두 전송하지 못하는 등 데이터에 의해 프로토콜 오작동이 일어나면 이는 binary-safe 하지 않다고 한다.)

  • 프로토콜 구조
1
2
3
4
5
6
7
8
*[인자의 갯수] CRLF
$[첫번째 인자의 바이트 수] CRLF
[첫번째 인자] CRLF
$[두번째 인자의 바이트 수]CRLF
[두번째 인자] CRLF
...
$[N번째 인자]CRLF
<N번째 인자> CRLF

telnet으로 접속 후 명령어를 프로토콜로 변경하여 실행해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[devson@localhost 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
$3
set
$5
mykey
$6
value1

+OK # 응답

*2
$3
get
$5
mykey

value1 # 응답
  • 수신 프로토콜

응답 데이터는 전부 다섯 가지로 구분된다.

응답 구분자 설명
+ 상태 응답 : 요청 처리 결과에 대한 상태 메세지 반환
- 에러 응답 : 요청 처리 실패의 원인에 대한 에러 메시지를 반환
: 숫자 응답 : 요청된 명령에 처리 결과를 숫자로 반환
$ 단일 벌크 응답 : 데이터의 크기를 포함한 데이터 반환
* 멀티 벌크 응답 : 응답되는 데이터 갯수 반환
Share