Redis 명령 팁

Redis 명령 팁 (Command tips)

명령에 대한 추가 정보를 얻습니다.

출처: 공식문서

명령 팁(Command tips)은 문자열 배열입니다. 이것들은 Redis 클라이언트에 명령에 대한 추가 정보를 제공합니다. 그 정보는 Redis Cluster 클라이언트에게 클러스터 배포에서 명령을 어떻게 실행하고 출력을 어떻게 처리해야 하는지 지시할 수 있습니다.

명령 자체의 동작에 엄격히 내부적인 명령 플래그(COMMAND 응답의 3번째 요소 참조)와 달리, 팁은 클라이언트에 보고되는 것 외에는 아무 목적이 없습니다.

명령 팁은 임의의 문자열입니다. 그러나 다음 섹션들은 제안된 팁을 설명하고 그 팁들이 따를 가능성이 높은 관례를 보여줍니다.

nondeterministic_output

이 팁은 명령의 출력이 결정적이지 않음을 나타냅니다. 즉 같은 인수와 데이터로 명령을 호출해도 다른 결과가 나올 수 있다는 뜻입니다. 그 차이는 명령의 무작위성(예: RANDOMKEY, SPOP), 호출 시점(예: TTL), 또는 서버 상태와 관련된 일반적 차이(예: INFO, CLIENT LIST)에서 비롯될 수 있습니다.

참고: Redis 7.0 이전에는 이 팁이 random 명령 플래그였습니다.

nondeterministic_output_order

이 팁의 존재는 명령의 출력이 결정적이지만 그 순서는 무작위임을 나타냅니다(예: HGETALL, SMEMBERS).

참고: Redis 7.0 이전에는 이 팁이 sort_for_script 플래그였습니다.

request_policy

이 팁은 클러스터링 모드에서 클라이언트가 명령을 보낼 샤드를 결정하는 데 도움이 됩니다. request_policy 팁이 없는 명령에 대해 클라이언트가 구현해야 하는 기본 동작은 다음과 같습니다:

  • 명령이 키 이름 인수를 받지 않음: 클라이언트는 임의의 샤드에서 명령을 실행할 수 있음
  • 하나 이상의 키 이름 인수를 받는 명령: 클라이언트는 입력 키의 해시 슬롯이 결정하는 단일 샤드로 명령을 라우팅해야 함

클라이언트가 기본과 다른 동작을 채택해야 하는 경우 request_policy 팁은 다음 중 하나일 수 있습니다:

  • all_nodes: 클라이언트는 모든 노드 — 마스터와 레플리카 모두 — 에서 명령을 실행해야 함. 예로 CONFIG SET. 이 팁은 키 이름 인수를 받지 않는 명령에 쓰임. 명령은 샤드별로 원자적으로 동작함
  • all_shards: 클라이언트는 모든 마스터 샤드에서 명령을 실행해야 함(예: DBSIZE). 이 팁은 키 이름 인수를 받지 않는 명령에 쓰임. 명령은 샤드별로 원자적으로 동작함
  • multi_shard: 클라이언트는 여러 샤드에서 명령을 실행해야 함. 클라이언트는 입력 키 이름 인수의 해시 슬롯에 따라 입력을 분할해야 함. 예를 들어 DEL {foo} {foo}1 barDEL {foo} {foo}1DEL bar로 분할해야 함. 키가 하나 이상의 슬롯으로 해시되면, 모든 슬롯이 같은 샤드에 관리되어도 명령을 분할해야 함. 이러한 명령의 예로 MSET, MGET, DEL이 있음. 단 SUNIONSTORE는 모든 키가 같은 해시 슬롯에 속해야 하므로 multi_shard로 간주하지 않음
  • special: SCAN처럼 클라이언트 요청 정책의 비자명한 형태를 나타냄

response_policy

이 팁은 클러스터에서 여러 샤드의 응답으로부터 클라이언트가 계산해야 할 집계(aggregate)를 결정하는 데 도움이 됩니다. request_policy 팁이 없는 명령의 기본 동작은 중첩 타입(배열, 집합, 맵) 응답에만 적용됩니다. 기본 동작에 대한 클라이언트 구현은 다음과 같아야 합니다:

  • 명령이 키 이름 인수를 받지 않음: 클라이언트는 모든 응답을 단일 중첩 데이터 구조로 집계할 수 있음. 예: 모든 샤드에 KEYS를 호출해 얻는 배열 응답. 이것들을 특정 순서 없이 하나로 묶어야 함
  • 하나 이상의 키 이름 인수를 받는 명령: 클라이언트는 입력 키 이름과 같은 순서로 응답을 유지해야 함. 예: MGET의 집계 응답

response_policy 팁은 스칼라 데이터 타입으로 응답하는 명령이거나, 클라이언트가 기본이 아닌 집계를 구현할 것으로 기대되는 경우 설정됩니다. 이 팁은 다음 중 하나일 수 있습니다:

  • one_succeeded: 적어도 하나의 샤드가 오류로 응답하지 않으면 클라이언트는 성공을 반환해야 함. 클라이언트는 얻는 첫 비-오류 응답으로 응답해야 함. 모든 샤드가 오류를 반환하면 아무 오류나 하나로 응답할 수 있음. 예를 들어 모든 샤드에 보내는 SCRIPT KILL을 고려 — 스크립트는 모든 샤드에 로드되어야 하지만 SCRIPT KILL은 보통 한 번에 하나에서만 실행됨
  • all_succeeded: 오류 응답이 없을 때만 클라이언트가 성공을 반환해야 함. 단 하나의 오류 응답이 있어도 집계를 무효화하고 그 오류를 반환해야 함. 그렇지 않으면 비-오류 응답 하나를 반환해야 함. 예: CONFIG SET, SCRIPT FLUSH, SCRIPT LOAD
  • agg_logical_and: 모든 응답에 대해 논리 AND 연산 결과를 반환해야 함(정수 응답에만 적용, 보통 0 또는 1을 반환하는 명령). 예: SCRIPT EXISTS — 스크립트 캐시에 주어진 SHA1 합의 존재를 나타내는 0과 1의 배열을 반환. 모든 샤드가 스크립트 SHA1 합이 각자 캐시에 있다고 보고했을 때만 집계 응답이 1이어야 함
  • agg_logical_or: 모든 응답에 대해 논리 OR 연산 결과를 반환해야 함(정수 응답에만 적용)
  • agg_min: 응답 중 최소값을 반환해야 함(숫자 응답에만 적용). 예: 클러스터 전체 WAIT 명령의 집계 응답은 모든 샤드의 최소값(동기화된 레플리카 수)이어야 함
  • agg_max: 응답 중 최대값을 반환해야 함(숫자 응답에만 적용)
  • agg_sum: 응답의 합을 반환해야 함(숫자 응답에만 적용). 예: DBSIZE
  • special: 이 팁은 비자명한 형태의 응답 정책을 나타냄. INFO가 훌륭한 예

예제

redis> command info ping
1)  1) "ping"
    2) (integer) -1
    3) 1) fast
    4) (integer) 0
    5) (integer) 0
    6) (integer) 0
    7) 1) @fast
       2) @connection
    8) 1) "request_policy:all_shards"
       2) "response_policy:all_succeeded"
    9) (empty array)
   10) (empty array)

더 알아보기 (Learn more)

  • Redis 명령 키 스펙 (Command key specifications)
  • Redis 명령 (COMMAND) 문서
  • Redis 클러스터 확장 (Scaling with Redis Cluster)