소개
Value는 입력된 순서와 상관없이 저장되며, 중복되지 않는다. 즉, value A가 2번 저장되도 결과적으로 하나만 남는다.
Sets에서는 집합이라는 의미에서 value를 member라 부른다.
Sets은 주로 카드게임같은 게임이나, 집합연산이 필요한 곳에 사용.
명령어 요약
- SET: SADD, SMOVE
- GET: SMEMBERS, SCARD, SRANDMEMBER, SISMEMBER, SSCAN
- POP: SPOP
- REM: SREM
- 집합연산: SUNION, SINTER, SDIFF, SUNIONSTORE, SINTERSTORE, SDIFFSTORE
- Enterprise: SLS, SRM, SLEN
1. SADD key "member_1" "member_2" ... : 해당 key에 member 추가
SortedStes를 사용하여 순서대로 조회 가능.
명령> sadd myset "멤버_1"
결과> 1
명령> sadd myset "멤버_2" "멤버_3" "멤버_4"
결과> 3 추가된 멤버 개수를 리턴한다
명령> smembers myset 멤버를 조회한다
결과> 1) 멤버_2
2) 멤버_4
3) 멤버_3 특별한 순서 없이 조회된다
4) 멤버_1
2. SREM key "member_1" "member_2" : 집합에서 member삭제. 삭제된 member수를 반환.
명령> sadd myset "멤버_1" "멤버_2"
결과> 2
명령> srem myset "멤버_1"
결과> 1 멤버_1을 삭제했다
명령> smembers myset
결과> 1) 멤버_2
명령> srem myset "멤버_X"
결과> 0 "멤버_X"는 없어서 삭제하지 못했다
3. SMEMBERS key : key의 데이터 조회.
명령> sadd myset "멤버_1" "멤버_2"
결과> 2
명령> sadd myset "멤버_3" "멤버_4"
결과> 2
명령> smembers myset
결과> 1) 멤버_2
2) 멤버_4
3) 멤버_3 특별한 순서 없이 조회됩니다.
4) 멤버_1
Enterprise 서버에는 명령어 뒤에 sort | desc 를 이용해 정렬도 사용가능하다.
4. SCARD key : 키에 있는 멤버 수 반환
명령> sadd myset "멤버_1" "멤버_2"
결과> 2
명령> sadd myset "멤버_3" "멤버_4"
결과> 2
명령> scard myset
결과> 4
Enterprise 서버의 slen도 같은 기능.
5. SUNION key1 key2 : key1, key2의 모든 값을 순서 없이 조회. (중복값은 제외)
명령어에서 key 개수를 늘려 3~4개 이상의 키끼리도 조회 가능 (key 개수 제한x)
명령> sadd myset1 A B C
결과> 3
명령> sadd myset2 B C D
결과> 3
명령> sunion myset1 myset2
결과> 1) C
2) B 특별한 순서 없이 조회됩니다.
3) A
4) D
6. SINTER key1 key2 : key1, key2의 교집합 값을 순서 없이 조회. (중복값은 제외)
명령어에서 key 개수를 늘려 3~4개 이상의 키끼리도 조회 가능 (key 개수 제한x)
명령> sadd myset1 A B C
결과> 3
명령> sadd myset2 B C D
결과> 3
명령> sinter myset1 myset2
결과> 1) B
2) C
7. SDIFF key1 key2 : key1, key2의 차집합 값을 순서 없이 조회.
명령어에서 key 개수를 늘려 3~4개 이상의 키끼리도 조회 가능(key 개수 제한x)
명령> sadd myset3 C E
결과> 2
명령> sdiff myset1 myset2 myset3
결과> 1) A
8. SUNIONSTORE destination_key key1 key2 : key1,2 의 합집합을 목적key에 저장.
key개수에 제한x.
SINTERSTORE : 교집합
SDIFFSOTRE : 차집합
명령> sadd myset1 A B C
결과> 3
명령> sadd myset2 B C D
결과> 3
명령> sunionstore dest_key myset1 myset2
결과> 4
명령> smembers dest_key
결과> 1) A
2) B
3) C
4) D
SUNIONSTORE myset1 myset1 myset2 myset3
myset1의 기존 내용은 지워지고, 결과가 myset1에 들어간다.
명령> sunionstore myset1 myset1 myset2 myset3
결과> 6
명령> smembers myset1
결과> 1) A
2) B
3) C
4) D
5) E
6) F
9. SISMEMBER key member : member가 있는지 확인.
있을경우 1 반환
없으면 0 반환.
명령> sadd myset "멤버_1" "멤버_2"
결과> 2
명령> sismember myset "멤버_1"
결과> 1 있다
명령> sismember myset "멤버_X"
결과> 0 없다
10. SMOVE source_key dest_key member : 소스key의 member값을 dest_key로 이동 후 소스key의 member값 삭제됨.
명령> sadd src_key A B C
결과> 3
명령> sadd dest_key D
결과> 1
명령> smove src_key dest_key A
결과> 1
명령> smembers src_key
결과> 1) B
2) C 소스 집합에서 A 는 지워졌다
명령> smembers dest_key
결과> 1) A 목적 집합 A가 추가되었다
2) D
만약 목적 집합key가 없으면 생성하고 member가 추가된다.
명령> del dest_key 목적 집합 삭제
결과> 1
명령> smove src_key dest_key B
결과> 1
명령> smembers src_key
결과> 1) C
명령> smembers dest_key 목적 집합이 생성되면서 member B가 추가되었다
결과> 1) B
만약 소스집합에 없는 member를 지정하면?
-> 아무작업이 일어나지 않고 0을 반환한다.
11. SPOP key : 해당 key의 랜덤한 member를 꺼내고 기존key에서 해당 mem은 삭제됨.
명령> sadd myset "멤버_1" "멤버_2" "멤버_3"
결과> 3
명령> spop myset
결과> 멤버_2 무작위로 멤버_2가 나왔다
명령> smembers myset
결과> 1) 멤버_3
1) 멤버_1
명령> spop myset
결과> 멤버_1
SPOP key <count> : 지정한 개수만큼 SPOP
3.2버전 이상에서 사용 가능
명령> sadd myset "멤버_1" "멤버_2" "멤버_3"
결과> 3
명령> spop myset 2
결과> 멤버_2
결과> 멤버_1
만약 SPOP으로 무작위 값을 반환 후 삭제하였다면 AOF에 SPOP은 어떻게 기록되는 것이고 redis가 리스타트 되었을때 ㅇ같은 값을 삭제하는 건가?
-> AOF에 SPOP을 기록하지 않고 삭제된 데이터를 SREM명령으로 기록하여 같은 데이터가 삭제된다.
SPOP으로 인한 정합성이 깨질일은 없다.
- 입력
- SPOP set1
- AOF 기록
- *3
$4
SREM
$5
set1
$1
B
- *3
12. SRANDMEMBER key : 랜덤한 값을 '조회'만 한다. 삭제xxx
명령> sadd myset A B C D
결과> 4
명령> srandmember myset
결과> B
명령> srandmember myset
결과> C
SRANDMEMBER key count : 지정한 count만큼 랜덤 조회.
2.6 버전 이상 부터 가능.
명령> srandmember myset 2
결과> 0) A
1) B
명령> srandmember myset -2
결과> 0) A
1) A
count가 member보다 클경우? -> mem개수 만큼 조회
count가 음수일 경우? -> mem을 중복하여 count만큼 조회.
명령> srandmember myset 6
결과> 0) A
1) B
2) C
3) D
명령> srandmember myset -6
결과> 0) A
1) B
2) C
3) D
4) B
5) C
13. SSCAN key cursor : 일정 단위 개수만큼씩 조회.
cursor값이 0일경우? -> 전부 조회.
SMEMBERS는 한번에 모든 member를 조회하는 반면, sscan은 한번에 약 10개씩 정도 조회한다.
member가 많으면 다음 커서를 지정해서 반복해서 조회한다.
SMEMBERS는 member수가 많을 경우 처리시간이 많이 소요되며, 그 동안 서버가 멈춘것 처럼 보인다.
그 대안으로 나온 것은 SSCAN 이다.
명령> sadd myset A1 A2 A3 B1 B2 B3 C1 C2 C3 D1 D2 D3 E1 E2 E3
결과> 15
명령> sscan myset 0
결과> next cursor -> 11
0) E1
1) A2
2) C2
...
10) B1
명령> sscan myset 11
결과> next cursor -> 0
0) A1
1) D1
2) C3
3) C1
SSCAN key CURSOR COUNT 상수 : 조회 개수 지정 옵션 COUNT
명령> sscan myset 0 count 20
결과> next cursor -> 0
0) E1
1) A2
2) C2
...
14) C1
pattern 조회
sscan key cursor match pattern
명령> sscan myset 0 match B*
결과> next cursor -> 0
0) B3
1) B2
2) B1
SSCAN key cursor [MATCH pattern] [COUNT count]
'Redis' 카테고리의 다른 글
Redis - Hashes (0) | 2024.06.16 |
---|---|
Redis - Sorted Sets (0) | 2024.06.16 |
Redis - Lists 데이터 타입, 명령어 (2) | 2024.06.16 |
Redis - String 데이터 타입, 명령어 (0) | 2024.06.16 |
Redis - 수정중 6 (0) | 2024.06.15 |