백엔드/redis

[Redis] Redis - Redis 집합

Koras02 2023. 2. 17. 01:45

이번 시간에는 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 sets

Introduction to Redis sets

redis.io