이 튜토리얼에서는 Redis 데이터 저장소에 저장된 두 개 이상의 집합(Set) 값에 대해 합집합 연산을 수행하는 방법을 알아봅니다. 이를 위해 Redis의 SUNION과 SUNIONSTORE 명령어를 사용합니다.
집합의 합집합(Union)이란?
집합론에서 두 개 이상의 집합에 대한 합집합은 해당 집합들에 존재하는 모든 원소를 중복 없이 포함하는 집합을 의미합니다. 예를 들어 다음과 같습니다.
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8, 9}
A와 B의 합집합 :-
A U B = {1, 2, 3, 4, 5, 6, 7, 8, 9}
위 예시에서 볼 수 있듯이, A와 B 양쪽에 모두 속한 원소 4와 5는 결과 집합에서 한 번만 나타납니다. 합집합은 항상 중복되지 않는(distinct) 원소만을 가집니다.
SUNION 명령어란?
SUNION 명령어는 지정된 두 개 이상의 집합에 대해 합집합 연산을 수행하고, 그 결과를 배열 형태로 반환합니다.
- 지정한 키 중 하나라도 존재하지 않으면, 해당 키는 빈 집합(empty set)으로 간주됩니다.
- 키는 존재하지만 그 키에 저장된 값이 집합 타입이 아닌 경우에는 에러가 반환됩니다.
문법(Syntax)
redis host:port> SUNION <keyName 1> <keyName 2> <keyName 3>
반환값(Output)
- (array) 합집합 연산 결과로 생성된 원소들을 담은 배열 - 에러: 키가 존재하지만 해당 키에 저장된 값이 집합 타입이 아닌 경우
사용 예시
redis-cli에서 먼저 SADD 명령어로 여러 개의 집합을 만든 뒤, SUNION 명령어로 합집합을 구하면 결과가 배열로 출력됩니다. 예를 들어 myset1과 myset2라는 두 집합에 대해 SUNION myset1 myset2를 실행하면 두 집합의 모든 고유 원소가 반환됩니다.
SUNIONSTORE 명령어란?
SUNIONSTORE 명령어는 지정된 두 개 이상의 집합에 대해 합집합 연산을 수행한 뒤, 그 결과를 새로운 집합으로 만들어 지정한 목적지(destination) 키에 저장합니다. 그리고 저장된 집합의 원소 개수를 정수(integer) 형태로 반환합니다.
- 지정한 키 중 하나라도 존재하지 않으면, 해당 키는 빈 집합으로 간주됩니다.
- 키는 존재하지만 그 키에 저장된 값이 집합 타입이 아닌 경우에는 에러가 반환됩니다.
문법(Syntax)
redis host:port> SUNIONSTORE <destination keyName> <keyName 1> <keyName 2> <keyName 3>
반환값(Output)
- (integer) 목적지(destination) 집합에 저장된 원소의 개수 - 에러: 키가 존재하지만 해당 키에 저장된 값이 집합 타입이 아닌 경우
사용 예시
SUNIONSTORE result myset1 myset2처럼 실행하면, myset1과 myset2의 합집합이 result라는 새로운 키에 저장되고, 저장된 원소의 개수가 정수로 반환됩니다. 이후 SMEMBERS 명령어로 result 키의 내용을 확인할 수 있습니다.
SUNION vs SUNIONSTORE 차이점
두 명령어의 핵심 차이는 결과를 어떻게 처리하느냐입니다. SUNION은 합집합 결과를 단순히 클라이언트에 반환하기만 하고 저장하지 않는 반면, SUNIONSTORE는 결과를 지정한 키에 영구적으로 저장합니다. 따라서 합집합 결과를 재사용해야 하는 경우에는 SUNIONSTORE를 사용하는 것이 효율적입니다.
참고 자료
- SUNION 공식 문서
- SUNIONSTORE 공식 문서
지금까지 Redis 데이터 저장소에 저장된 두 개 이상의 집합 값에 대해 합집합 연산을 수행하는 방법을 살펴보았습니다. 이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!