Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Redis ZINTERSTORE 명령어 완벽 가이드 – 정렬된 집합(Sorted Set)의 교집합 구하는 방법

이 튜토리얼에서는 Redis의 ZINTERSTORE 명령어를 사용하여 Redis 데이터 저장소에 저장된 두 개 이상의 정렬된 집합(Sorted Set)에 대해 교집합 연산을 수행하는 방법을 알아봅니다.

집합의 교집합이란?

집합 이론에서 두 개 이상의 집합에 대한 교집합(intersection)은 모든 집합에 공통으로 포함된 요소들로 이루어진 집합을 의미합니다. 예를 들면 다음과 같습니다.

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8, 9}

A와 B의 교집합 :-
A ∩ B = {4, 5}

ZINTERSTORE 명령어란?

ZINTERSTORE 명령어는 지정된 두 개 이상의 정렬된 집합에 대해 교집합 연산을 수행하고, 그 결과를 새로운 정렬된 집합으로 지정된 키(destination)에 저장합니다. 존재하지 않는 정렬된 집합은 빈 집합으로 간주됩니다. 만약 키가 존재하지만 해당 키에 저장된 값이 정렬된 집합이 아니라면 오류가 반환됩니다.

문법(Syntax)

redis host:post> ZINTERSTORE <destination> numkeys <keyName> [<keyName>] [WEIGHTS weight [weight]] [AGGREGATE SUM|MIN|MAX]

반환값(Output)

- (array) reply : 교집합 연산 결과로 생성된 요소들을 담고 있는 배열
- Error : 키가 존재하지만 해당 키에 저장된 값이 정렬된 집합이 아닌 경우

numkeys

numkeys는 교집합 연산을 수행할 입력 키, 즉 정렬된 집합 값을 가진 키의 개수를 나타냅니다. 입력 키와 기타 인자들을 전달하기 전에 반드시 numkeys 인자를 먼저 전달해야 합니다. 연산 결과는 destination 키에 새로운 정렬된 집합으로 저장되며, 해당 키가 이미 존재하는 경우에는 기존 값이 덮어쓰기 됩니다.

WEIGHTS 옵션

WEIGHTS 옵션을 사용하면 각 입력 정렬된 집합에 대한 곱셈 계수(가중치)를 지정할 수 있습니다. 즉, 모든 입력 정렬된 집합에 있는 각 요소의 점수(score)는 집계 함수에 전달되기 전에 해당 계수와 곱해집니다. WEIGHTS 옵션을 지정하지 않으면 곱셈 계수는 기본적으로 1로 설정됩니다.

AGGREGATE 옵션

AGGREGATE 옵션은 교집합 결과를 어떻게 집계할지 지정하는 데 사용됩니다. 기본값은 SUM이며, 이 경우 요소의 점수는 해당 요소가 존재하는 모든 입력 정렬된 집합에서 합산됩니다. 이 옵션을 MIN 또는 MAX로 설정하면, 결과 집합에는 해당 요소가 존재하는 입력 정렬된 집합들 중 최소 또는 최대 점수가 포함됩니다.

예제

아래 예제는 ZINTERSTORE 명령어를 사용하여 두 개의 정렬된 집합에서 공통 멤버를 찾아 그 결과를 새로운 키에 저장하는 과정을 보여줍니다. 실제 환경에서 다양한 WEIGHTS와 AGGREGATE 조합을 직접 실행해 보면서 동작 방식을 익혀보시기 바랍니다.

참고 자료

  1. Redis 공식 문서 – ZINTERSTORE 명령어

지금까지 Redis 데이터 저장소에 저장된 두 개 이상의 정렬된 집합 값에 대해 교집합 연산을 수행하는 방법을 알아보았습니다. 이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!