이번 시간에는 Redis 집합체에 대해 알아보도록 하겠습니다.
Redis Sets
Redis Sets이란 고유 문자열(구성원)의 순서
없는 집합을 의미합니다.
Redis Sets를 사용하여 다음 작업을 효율적으로
수행할 수 있습니다.
- 고유 항목 추적(예: 지정된 블로그에 게시물을 엑세스하는
모든 고유 IP 주소 추적) - 관계(예: 주어진 역할을 가진 모든 사용자 집합)를 나타냄
- 교차점, 결합 및 차이와 같은 공통 집합 연산을 수행
Redis Sets 사용
다음과 같이 사용자 123 및 456의 즐겨찾기 부분에
사용자가 읽을 책 ID 집합을 저장합니다.
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
아래와 같이 사용자 123이 742번과 299번 책을
좋아하는지 확인할 수 있습니다.
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
사용자 123과 456번은 공통적으로 좋아하는
책이 있는지 확인할 수 있습니다.
> SINTER user:123:favorites user:456:favorites
1) "561"
- 123 사용자가 선호하는 책은 몇 권인지도 확인할 수 있습니다.
> SCARD user:123:favorites
(integer) 3
Redis 집합 최대크기
Redis 집합의 최대 크기는 2^32 - 1(4,294,967,295) 맴버 입니다.
Redis 집합 명령어
- SADD: 집합에 새 맴버을 추가
- SREM: 집합에서 지정된 맴버를 제거
- SISMEMBER: 설정된 구성원 자격에 대한 문자열 테스트
- SINTER: 두 개 이상의 집합이 공통으로 갖는 맴버 집합(교차점)을 반환
- SCARD: 집합의 크기(cardinality)를 반환
성능
항목이 설정으로 맴버 여부를 추가 제거 확인하는 것을
포함해 대부분의 설정 작업은 O(1) 입니다.
이것은 수십만 명 이상의 회원을 가진 대형
사이트의 경우에 매우 효율적인 시스템 입니다.
단 SMEMBERS 명령어를 실행할 떄는
주의 사항이 있습니다.
이 명령은 O(n)으로 단일 응답으로
전체 집합을 반환합니다.
또는 세트의 모든 구성원을 반복적으로
검색하고 싶다면 SSAN을 사용하면 됩니다.
집합 명령어를 대체하려면?
대용량 데이터 세트(or 스트리밍 데이터)에서
많은 메모리를 사용할 수 있는 구성원 자격
검사를 설정하면 됩니다.
만약 메모리 사용량이 걱정되고 완변한 정밀도가
필요하지 않을 경우 BloomFilter 또는 CuckooFilter
대안으로 사용하면 됩니다.
Redis Sets는 인덱스의 일종으로 자주 사용됩니다.
데이터를 인덱싱하고 쿼리해야 할 경우에는
RedisSearch 및 RedisJ를 사용합니다.
참고 문서
'백엔드 > redis' 카테고리의 다른 글
[Redis] Redis - Redis 리스트 (0) | 2023.02.08 |
---|---|
[Redis] Redis - Redis 문자열 (0) | 2023.01.31 |
[Redis] Redis 설치하기 - Linux 기준 (0) | 2023.01.30 |