set in redis

  • 고유한 문자열의 집합을 의미한다.
  • 고유하다는 의미는 중복된 값이 여러 개 있으면 안 된다는 것을 의미한다.
  • 따라서 login id와 같이 고유한 값이어야 하는 상황에 set을 사용할 수 있다.
  • 혹은 set 자체가 집합이므로 집합 연산이 필요한 쿼리가 있으면 set 데이터 타입을 사용하면 좋다.

SADD <key> (member1) (member2) ... : 새로운 set 데이터를 만들면서 새로 만들어진 <key>안에 요소 값을 넣어준다. 한번에 여러 개의 요소를 넣을 수 있다.

 

SMEMBERS <key> : <key>안에 있는 모든 요소를 출력해준다.

 

SUNION <key1> <key2> ... : 여러 키의 요소들을 UNION해서 출력해준다. 이 때 중복된 요소들은 제거해서 하나만 출력해준다. 즉, 합집합을 의미한다.

 

SINTER <key1> <key2> ...  : 여러 키의 요소들 중에 모든 키에 들어간 요소를 출력해준다. 즉, 교집합을 의미한다.

 

SDIFF <key1> <key2> ... :

  • 가장 맨 처음 key을 기준으로 나머지에 키에 존재하는 것들을 제거해주고 나머지 요소를 출력해준다. 즉, 차집합을 말한다.
  • key1에 1,2,3있고 key2에 2있고, key 3에 3이 있을 때 sdiff key1 key2 key3 하면 1을 출력해준다.

[SUNIONSTORE, SINTERSTORE, SDIFFSTORE] <new-key> <key1> <key2> ... : 위에서 보인 집합 연산과 같은 연산을 진행하지만 연산 결과를 출력하지 않고, <new-key>에 저장하여 새로운 set 데이터를 생성한다.

 

SISMEMBER <key> (member) : <key>안에 (member) 요소가 있는지 확인해주는 명령어이다. 존재하면 1, 없으면 0을 출력해준다.

 

SMISMEMBER <key> (member1) (member2) ... : SISMEMBER의 multiple 버전으로 여러 요소를 기준으로 존재하는지 확인할 수 있는 명령어이다. 이 때 결과는 리스트 형태로 각각 요소에 대해 0 or 1을 반환해준다.

 

SCARD <key> : <key> 안에 있는 요소의 개수를 출력해준다. CARD는 cardinality(카디널리티)를 의미한다.

 

SREM <key> (member) : <key>안에 (member)요소를 삭제한다.

 

SSCAN <key> <cursor-id> COUNT <num>

  •  smembers를 통해 가져오면 모든 데이터를 가져오게 되므로 수백만 개의 요소가 있으면 좋은 성능을 기대하기 어렵다.
  • 이 때 사용하는 게 sscan으로 <key> 안에 요서를 <cursor-id>를 기준으로 <num> 만큼 카운트해서 데이터를 가져온다.
  • 기본적으로 처음 sscan 명령어를 사용할 때 <cursor-id>는 0으로 잡는다.
  • 출력 결과로는 다음 <cursor-id>를 출력해주고 그 다음에 요소의 값을 출력해준다.
  • 예를 들어 key1에 a,b,c,d,e 요소가 들어있고, sscan key1 0 count 2 하면 출력으로는 약식으로 3, a, b와 같이 나온다. 따라서 다음 커서로 3을 넣고 똑같이 실행하면 5, c, d가 출력된다.
  • 이 때 count는 자동으로 설정되므로, 지정한 <num>만큼의 요소 보다 더 나오거나 덜 나올 수도 있다.

'Database > Redis' 카테고리의 다른 글

관계형 데이터 사용 in redis(feat. SORT)  (0) 2024.10.07
Sorted Set 타입 명령어  (0) 2024.10.07
hash 타입 명령어  (0) 2024.09.20
Redis 디자인 방법론  (0) 2024.09.19
String 타입 명령어  (0) 2024.09.19

+ Recent posts