JSON 정보

JavaScript Object Notation (JSON)은 Valkey용 Memorystore에서 구조화된 데이터를 저장하고 조작하는 효율적인 방법을 제공합니다. JSON을 사용하면 다음과 같은 이점이 있습니다.

  • 빠른 검색 및 필터링 기능
  • 전체 문서를 덮어쓰지 않고 JSON 데이터를 인플레이스 업데이트
  • 복잡한 데이터 구조를 효율적으로 쿼리, 수정, 관리

애플리케이션에 동적이고 유연한 데이터 스토리지가 필요한 경우 JSON이 적합합니다. 또한 JSON을 사용하면 스키마를 사용하지 않고도 Memorystore for Valkey 인스턴스 내에 복잡한 데이터 세트를 인코딩할 수 있습니다. 인스턴스에서 데이터를 저장하고, 액세스하고, 업데이트할 수 있으며 데이터를 직렬화하고 역직렬화하기 위해 맞춤 코드를 관리할 필요가 없습니다.

JSON 문서는 데이터를 저장하고 전송하기 위한 사람이 읽을 수 있는 텍스트 형식입니다. 이 형식은 키-값 쌍과 구조화된 데이터 유형으로 구성됩니다. JSON 형식을 사용하면 전체 객체를 조작하지 않고도 JSON 문서의 일부를 가져오고 업데이트할 수 있습니다. 이렇게 하면 실적을 개선하고 비용을 절감할 수 있습니다. 또한 JSON 형식은 RFC 7159, ECMA-404 JSON 데이터 교환 표준, JSON 텍스트의 UTF-8 유니코드를 준수합니다.

가용성

버전 8.0 이상의 Memorystore for Valkey 인스턴스를 만드는 경우 JSON 데이터 유형 및 관련 명령어 버전 1.0이 자동으로 제공됩니다. 이 데이터 유형은 JSON 모듈 버전 2와 API 호환됩니다. 또한 RFC 7159에 따라 JSON 문서의 루트 요소는 모든 JSON 데이터 유형일 수 있습니다.

JSON 속성

JSON에는 다음과 같은 속성이 있습니다.

  • 최대 문서 크기: 악의적이거나 무제한 삽입으로 인해 메모리 부족 문제가 발생할 수 있으므로 개별 JSON 키의 크기에 제한을 구성할 수 있습니다.

    기본적으로 이 속성의 값은 0로 설정되어 있으며, 이는 JSON 문서의 크기에 제한이 없음을 의미합니다. 이 한도를 설정하려면 CONFIG SET json.max-document-size VALUE 명령어를 사용합니다. 여기서 VALUE은 문서의 최대 크기입니다. 예를 들어 4123456를 지정하면 최대 문서 크기는 4,123,456바이트(4MB)입니다.

    지정된 키에 저장된 JSON 값에서 사용되는 메모리 양을 확인하려면 JSON.DEBUG MEMORY KEY 또는 MEMORY USAGE KEY 명령어를 사용하면 됩니다. 이러한 명령어에서 KEY은 JSON 값이 저장된 키의 이름입니다.

  • 최대 깊이: JSON 객체 및 배열의 최대 중첩 수준입니다. 자세한 내용은 최대 중첩 깊이 한도를 참고하세요.

JSON 문서 크기

JSON 문서는 빠른 액세스 및 수정을 위해 최적화된 형식으로 내부적으로 저장되므로 이러한 유형의 문서는 많은 메모리를 사용할 수 있습니다. JSON 문서가 사용하는 메모리 양을 확인하려면 JSON.DEBUG MEMORY KEY 명령어를 사용하세요. 여기서 KEY은 문서를 포함하는 키의 이름입니다.

JSON 카테고리

JSON 명령어 및 데이터에 대한 액세스를 관리하려면 @json 카테고리를 사용하세요. 이 카테고리 외에도 @read, @write, @fast, @slow, @admin 카테고리에서 JSON 명령어를 사용합니다.

다음 표는 JSON 명령어를 @read, @write, @fast, @slow, @admin, @json 카테고리에 매핑할 수 있는지 여부를 나타냅니다.

JSON 명령어 @json @read @write @fast @slow @admin
JSON.ARRAPPEND Y N Y 아니요 아니요
JSON.ARRINDEX Y N Y 아니요 아니요
JSON.ARRINSERT Y N Y 아니요 아니요
JSON.ARRLEN Y N Y 아니요 아니요
JSON.ARRPOP Y N Y 아니요 아니요
JSON.ARRTRIM Y N Y 아니요 아니요
JSON.CLEAR Y N Y 아니요 아니요
JSON.DEBUG Y 아니요 아니요 Y
JSON.DEL Y N Y 아니요 아니요
JSON.FORGET Y N Y 아니요 아니요
JSON.GET Y N Y 아니요 아니요
JSON.MGET Y N Y 아니요 아니요
JSON.MSET Y N Y N Y N
JSON.NUMINCRBY Y N Y 아니요 아니요
JSON.NUMMULTBY Y N Y 아니요 아니요
JSON.OBJKEYS Y N Y 아니요 아니요
JSON.OBJLEN Y N Y 아니요 아니요
JSON.RESP Y N Y 아니요 아니요
JSON.SET Y N Y N Y N
JSON.STRAPPEND Y N Y 아니요 아니요
JSON.STRLEN Y N Y 아니요 아니요
JSON.TOGGLE Y N Y 아니요 아니요
JSON.TYPE Y N Y 아니요 N

JSON 명령어

이 섹션에서는 JSON 문서에 대한 작업을 실행하는 데 사용할 수 있는 JSON 명령어를 나열하고 설명합니다.

명령어 설명
JSON.ARRAPPEND 경로의 배열에 하나 이상의 JSON 값을 추가합니다.
JSON.ARRINDEX 배열에서 스칼라 JSON 값의 첫 번째 항목을 검색합니다.
JSON.ARRINSERT 지정한 색인 앞의 경로에 있는 배열에 하나 이상의 JSON 값을 삽입합니다.
JSON.ARRLEN 경로에 있는 JSON 배열의 길이를 가져옵니다.
JSON.ARRPOP 배열의 색인에서 요소를 삭제하고 반환합니다.
JSON.ARRTRIM 지정한 요소의 포함 범위를 포함하도록 경로에서 배열을 자릅니다.
JSON.CLEAR 지정한 경로에서 배열 또는 JSON 객체를 지웁니다.
JSON.DEBUG JSON 문서에 관한 정보를 가져옵니다. Memorystore for Valkey는 다음 하위 명령어를 지원합니다.
  • MEMORY: 값의 메모리 사용량을 바이트로 보고합니다.
  • DEPTH: JSON 문서의 최대 경로 깊이를 보고합니다.
  • FIELDS: JSON 요소 내 필드 수를 보고합니다. 이 요소는 지정한 키에 저장됩니다.
  • HELP: JSON.DEBUG 명령어에 관한 유용한 정보를 반환합니다.
JSON.DEL
JSON.FORGET
지정한 경로의 JSON 값을 삭제합니다.
JSON.GET JSON 직렬화된 형식으로 지정한 경로의 값을 반환합니다.
JSON.MGET 여러 문서 키에서 지정한 경로의 값을 반환합니다.
JSON.MSET 경로에 여러 키의 JSON 값을 설정합니다.
JSON.NUMINCRBY 경로에 저장된 숫자 값을 지정한 숫자만큼 늘립니다.
JSON.NUMMULTBY 경로에 저장된 숫자 값을 지정한 숫자로 곱합니다.
JSON.OBJKEYS 지정한 경로에 있는 JSON 객체에서 키 이름을 가져옵니다.
JSON.OBJLEN 지정한 경로에 있는 JSON 객체의 키 수를 가져옵니다.
JSON.RESP Redis 직렬화 프로토콜 (RESP) 형식으로 키의 JSON 값을 반환합니다.
JSON.SET 지정한 경로에 JSON 값을 설정합니다.
JSON.STRAPPEND 지정한 경로의 JSON 문자열에 문자열을 추가합니다.
JSON.STRLEN 지정한 경로에서 JSON 문자열 값의 길이를 가져옵니다.
JSON.TOGGLE truefalse 사이에서 불리언 값을 전환합니다. 이 값은 사용자가 지정한 경로에 저장됩니다.
JSON.TYPE 지정한 경로에 있는 JSON 값의 유형을 가져옵니다.

Memorystore for Valkey가 JSON과 상호작용하는 방식

이 섹션에서는 Memorystore for Valkey가 JSON 데이터 유형과 상호작용하는 방법을 설명합니다.

여러 조건식

필터링을 위한 조건식이 여러 개 있는 경우 Memorystore for Valkey는 다음 순서로 평가합니다.

  1. 괄호 안의 연산
  2. 논리 AND 표현식 (&&)
  3. 논리적 OR (||) 표현식

최대 중첩 깊이 제한

JSON 객체 또는 배열에 다른 JSON 객체 또는 배열인 요소가 있으면 내부 객체 또는 배열이 외부 객체 또는 배열 내에 중첩됩니다. 최대 중첩 깊이 제한은 128입니다. 따라서 $.a.b.c.d...와 같은 값은 128단계까지만 도달할 수 있습니다.

중첩 깊이가 128보다 큰 JSON 문서를 만들려고 하면 Memorystore for Valkey에서 문서를 거부하고 오류가 표시됩니다. 하지만 CONFIG SET json.max-path-limit VALUE 명령어를 사용하여 이 한도를 조정할 수 있습니다. 여기서 VALUE는 원하는 깊이 한도입니다.

JSON 숫자

JSON에서는 부동 소수점 숫자와 정수의 데이터 유형이 동일하므로 둘 다 숫자라고 합니다. Memorystore for Valkey가 JSON 숫자를 수신하면 숫자를 다음 내부 바이너리 표현 중 하나로 변환합니다.

  • 64비트 IEEE 배정밀도 부동 소수점 수
  • 부호 있는 64비트 정수

JSON은 원래 문자열과 모든 서식을 유지하지 않습니다. Memorystore for Valkey가 JSON 응답의 일부로 숫자를 출력하면 Memorystore for Valkey는 내부 바이너리 표현에서 일반 형식 지정 규칙을 사용하는 인쇄 가능한 문자열로 숫자를 변환합니다.

JSON 숫자와 함께 JSON.NUMINCRBYJSON.NUMMULTBY 명령어를 사용하는 경우 다음 조건이 적용됩니다.

  • 두 숫자가 모두 정수이고 결과가 int64 범위를 벗어나면 결과는 자동으로 64비트 IEEE 배정밀도 부동 소수점 숫자가 됩니다.
  • 숫자 중 하나 이상이 부동 소수점 수인 경우 결과는 64비트 IEEE 배정밀도 부동 소수점 수입니다.
  • 결과가 64비트 IEEE 배정밀도 부동 소수점 수의 범위를 초과하면 OVERFLOW 오류 메시지가 표시됩니다.

직접 배열

Memorystore for Valkey는 배열 객체를 직접 필터링합니다. 예를 들어
&lbrack;0,1,2,3&rbrack;과 같은 데이터와 $[?(@<3)]과 같은 경로 쿼리가 있는 경우 Memorystore for Valkey는 &lbrack;0,1,2&rbrack;을 반환합니다. {"my_valkey_key":[0,1,2,3]}와 같은 데이터와
$.my_valkey_key[?(@<3)]와 같은 경로 쿼리의 경우 Memorystore for Valkey는 &lbrack;0,1,2&rbrack;도 반환합니다.

배열 색인

Memorystore for Valkey를 사용하면 배열에 양수 및 음수 색인을 사용할 수 있습니다. 이러한 유형의 색인에는 다음 조건이 적용됩니다.

  • 양수 색인: 숫자는 배열의 시작 부분부터 시작합니다. 예를 들어 배열의 양수 색인이 3인 경우 0은 첫 번째 요소를 쿼리하고 1은 두 번째 요소를 쿼리하며 2는 세 번째 요소를 쿼리합니다.
  • 음수 색인: 숫자는 배열의 에서 시작됩니다. 배열의 색인이 -3이면 -1은 세 번째 요소를 쿼리하고, -2는 두 번째 요소를 쿼리하고, -3은 첫 번째 요소를 쿼리합니다.

Memorystore for Valkey는 색인을 올림하거나 내림하지 않습니다. 길이가 3인 배열이 있고 3보다 큰 양수 색인이나 -3보다 작은 음수 색인을 호출하면 Memorystore for Valkey에서 결과를 반환하지 않습니다.

JSON 경로의 구문

JSON 경로에 잘못된 문법을 사용할 수 없습니다. 잘못된 문법이 있는 JSON 경로의 하위 집합에 유효한 경로가 포함되어 있는 경우에도 이 조건이 적용됩니다.