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

Redis SDIFF 명령어로 집합 간 차집합 연산 수행하는 방법

이 튜토리얼에서는 Redis 데이터 저장소에 저장된 두 개 이상의 집합(set) 값에 대해 차집합 연산을 수행하는 방법을 SDIFFSDIFFSTORE 명령어를 통해 알아보겠습니다.

집합의 차집합(Difference)이란?

집합 이론에서 두 집합 A와 B의 차집합은 A − B로 표기하며, 집합 B에는 속하지 않으면서 집합 A에는 속하는 모든 원소들로 구성된 집합을 의미합니다. 예를 들어 다음과 같습니다.

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

A와 B의 차집합 :-
A - B = {1, 2, 3}

위 예시에서 볼 수 있듯이, A − B는 집합 A에는 존재하지만 집합 B에는 없는 원소인 1, 2, 3만을 결과로 반환합니다.

SDIFF 명령어

SDIFF 명령어는 지정된 두 개 이상의 집합에 대해 차집합 연산을 수행하고, 그 결과를 배열(array) 형태로 반환합니다.

주요 동작 특징은 다음과 같습니다.

  • 지정한 키 중 하나라도 존재하지 않으면 해당 키는 빈 집합(empty set)으로 간주됩니다.
  • 키가 존재하지만 저장된 값이 집합 타입이 아닌 경우 에러가 반환됩니다.

SDIFF 명령어의 기본 문법은 다음과 같습니다.

문법

redis host:post> SDIFF <keyName 1> <keyName 2> <keyName 3>

반환값

- (array) 차집합 연산 결과로 생성된 원소들을 담은 배열
- Error, 키가 존재하지만 저장된 값이 집합 타입이 아닌 경우

예제

실제 Redis CLI에서 여러 개의 집합에 SDIFF 명령어를 실행하면, 첫 번째 집합을 기준으로 나머지 집합에 포함되지 않은 원소들이 순서대로 출력됩니다.

SDIFFSTORE 명령어

SDIFFSTORE 명령어는 SDIFF와 동일하게 차집합 연산을 수행하지만, 결과를 배열로 반환하는 대신 지정된 목적지 키(destination key)에 새로운 집합으로 저장합니다.

동작 특징도 SDIFF와 유사합니다.

  • 지정한 키 중 하나라도 존재하지 않으면 해당 키는 빈 집합으로 간주됩니다.
  • 키가 존재하지만 저장된 값이 집합 타입이 아니면 에러가 반환됩니다.
  • 목적지 키에 이미 다른 값이 저장되어 있다면 해당 값은 덮어쓰기 됩니다.

SDIFFSTORE 명령어의 기본 문법은 다음과 같습니다.

문법

redis host:post> SDIFFSTORE <destination keyName> <keyName 1> <keyName 2> <keyName 3>

반환값

- (integer) 목적지 집합에 저장된 원소의 개수
- Error, 키가 존재하지만 저장된 값이 집합 타입이 아닌 경우

예제

SDIFFSTORE를 실행하면 차집합 연산 결과가 목적지 키에 새로운 집합으로 저장되고, 저장된 원소의 개수가 정수 형태로 반환됩니다. 이후 SMEMBERS 명령어로 목적지 키를 조회하면 저장된 결과를 확인할 수 있습니다.

참고 자료

  1. SDIFF 공식 문서
  2. SDIFFSTORE 공식 문서

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