HELLO

Redis Developer Course Redis Technical Support Redis Enterprise Server

레디스 출력 프로토콜(포멧) 선택

RESP(REdis Serialization Protocol)는 레디스 서버와 클라이언트간의 (서버 입장에서) 출력 프로토콜이다. 레디스 버전 6부터 RESP3를 새로 추가(새로 개발한 것임)했다. 레디스 버전 5까지는 RESP2만 있었다.

레디스 버전 6에서도 클라이언트는 기본적으로 RESP2로 접속된다.

HELLO 명령은 현재 RESP 버전을 확인할 수 있고, RESP 버전을 선택할 수 있다. RESP 버전은 클라이언트별로 적용된다. 즉, HELLO 3를 실행한 클라이언트만 RESP3가 적용된다.

다음 예는 RESP 3에서 결과가 다르게 나오는 것을 보여준다. 이것은 서버 전체 적용이 아니고 클라이언트에 따라서 선택할 수 있다.

Example

명령>HELLO
결과> 1) "server"
2) "redis"
3) "version"
4) "6.2.5"
5) "proto"
6) (integer) 2

7) "id"
8) (integer) 3
9) "mode"
10) "standalone"
11) "role"
12) "master"
13) "modules"
14) (empty array)
명령>HELLO 3
결과> 1# "server" => "redis"
2# "version" => "6.2.5"
3# "proto" => (integer) 3
4# "id" => (integer) 3
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)
명령>hgetall myhash
결과> 1# "field1" => "value1"
2# "field2" => "value2"
명령>zrange key 0 -1 withscores
결과> 1) 1) "value10"
    2) (double) 10
2) 1) "value11"
    2) (double) 11
3) 1) "value12"
    2) (double) 12
4) 1) "value13"
    2) (double) 13

RESP2

RESP2는 5가지 형식을 지원한다.

  • Status(+): 단순 리턴 메시지
  • Error(-): 에러 메시지
  • Integer(:): 정수
  • Bulk($): 값(binary-safe: 특수문자가 포함되어도 안전한 문자열)
  • Multibulk(*): 배열 표시(값의 개수 표시)

RESP2에서 키와 값은 모두 bulk로 표시한다.
키와 값 여러개를 배열 형식으로 표시할 때는 맨 앞에 multibulk(*)와 값 개수를 표시하고 다음에 bulk($)로 값을 표시한다.
예) lrange mylist 0 -1이 3개 값을 리턴하면

Integer(:)는 정확히 정수를 리턴하는 명령에 사용된다. 예) llen, scard, strlen, incr, decr, incrby, decrby, 등.
incrbyfloat 명령은 bluk를 사용한다.

RESP3

RESP3는 13가지 형식으로 늘었다. 하위 프로토콜 호환성을 위해서 RESP2 5가지 형식은 변경없이 그대로 사용한다.
추가된 것 중 대표적인 것은 Null, Boolean, Double, Set, Map 형식이 있다.
아래는 추가된 8가지 형식을 간단히 설명한다.

  • Null(_): 널 표시
  • Boolean(#): true(참)/false(거짓) 표시
  • Double(,): 실수(floting point number)
  • Blob error(!): binary-safe 에러
  • Big number((): 아주 큰 정수 표시, 예) 3492890328409238509324850943850943825024385
  • Set(~): 집합
  • Map(%): 맵
  • Verbatim string(=): text를 그대로 출력할 때 사용

RESP 자세한 설명

클라이언트 이름 설정 SETNAME

클라이언트 이름을 설정할 수 있다.

ACL(Access Control List)을 사용하여 사용자(user)별로 명령 사용 권항을 부여할 경우 클라이언트 이름을 설정하기 위해서 client 명령 사용 권한을 줄 필요없이 hello 명령 사용 권한을 부여하는 것이 안전한 방법이다. Client 명령은 kill 서브명령으로 다른 클라이언트를 죽일 수도 있기 때문이다.


명령문

HELLO [<protocol-version>] [AUTH <user> <password>] [SETNAME <name>]

  • 이 명령은 version 6.0.0 부터 사용할 수 있다.
  • version 6.2.0 부터 protocol-version를 지정하지 않고 hello 명령만 사용할 수 있다.
  • 논리적 처리 소요시간은 O(1)이다.

<< AUTH HELLO ECHO >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.