이 튜토리얼에서는 Redis 데이터 저장소에 저장된 두 개 이상의 집합(Set) 값에 대해 교집합(intersection) 연산을 수행하는 방법을 알아봅니다. Redis에서 제공하는 SINTER 명령어와 SINTERSTORE 명령어를 활용하면 손쉽게 교집합을 구할 수 있습니다.
집합의 교집합(Intersection)이란?
집합론에서 두 개 이상의 집합의 교집합이란, 모든 집합에 공통으로 포함된 요소들만으로 이루어진 집합을 의미합니다. 예를 들어 다음과 같습니다.
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8, 9}
A와 B의 교집합 :-
A ∩ B = {4, 5}
SINTER 명령어
SINTER 명령어는 지정된 두 개 이상의 집합에 대해 교집합 연산을 수행하고, 그 결과를 배열(array) 형태로 반환합니다. 만약 지정된 키 중 하나라도 존재하지 않으면 해당 키는 빈 집합(empty set)으로 간주됩니다. 반면, 키는 존재하지만 저장된 값이 집합 타입이 아니라면 에러가 반환됩니다.
문법
redis host:port> SINTER <keyName 1> <keyName 2> <keyName 3>
반환값
- (array): 교집합 연산 결과로 나온 요소들을 담은 배열 - Error: 키가 존재하지만 저장된 값이 집합 타입이 아닌 경우
예제

SINTERSTORE 명령어
SINTERSTORE 명령어 역시 지정된 두 개 이상의 집합에 대해 교집합 연산을 수행하지만, 결과를 배열로 반환하는 대신 새로운 집합으로 만들어 지정한 목적지(destination) 키에 저장한다는 점이 다릅니다. 지정된 키 중 하나라도 존재하지 않으면 빈 집합으로 간주되며, 키가 존재하는데 저장된 값이 집합 타입이 아니라면 에러가 반환됩니다.
문법
redis host:port> SINTERSTORE <destination keyName> <keyName 1> <keyName 2> <keyName 3>
반환값
- (integer): 목적지 집합에 저장된 요소의 개수 - Error: 키가 존재하지만 저장된 값이 집합 타입이 아닌 경우
예제

참고 자료
- SINTER 명령어 공식 문서
- SINTERSTORE 명령어 공식 문서
지금까지 Redis 데이터 저장소에 저장된 두 개 이상의 집합 값에 대해 교집합 연산을 수행하는 방법을 살펴보았습니다. 이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!
