소개
Value는 score로 sort되며 중복되지 않는다.
score가 같으면 value로 sort.
Sorted Sets에서는 집합이라는 의미에서 value를 member라 부른다.
Sorted Sets은 주로 sort가 필요한 곳에 사용.
1. ZADD key score(숫자) member : sadd에서 score가 추가된 형태로 insert.
명령> zadd myzip 60 "경기"
결과> 1
명령> zadd myzip 20 "서울"
결과> 1
명령> zadd myzip 40 "부산"
결과> 1
명령> zrange myzip 0 -1 score 순서로 표시된다
결과> 1) 서울
2) 부산
3) 경기
명령> zrange myzip 0 -1 withscores withscores 옵션을 사용하면 score가 표시된다
결과> 1) 20 -> 서울
2) 40 -> 부산
3) 60 -> 경기
score member를 여러개 입력하면?
명령> zadd myzip 100 "충청"80 "전라"
결과> 2
명령> zrange myzip 0 -1 withscores
결과> 1) 20 -> 서울
2) 40 -> 부산
3) 60 -> 경기
4) 80 -> 전라
5) 100 -> 충청
score가 같으면 member로 sort.
명령> del myzip
결과> 1
명령> zadd myzip 10 "충청" 10 "전라" 10 "서울" 10 "경기" 10 "부산"
결과> 5
명령> zrange myzip 0 -1 withscores
결과> 1) 10 -> 경기
2) 10 -> 부산
3) 10 -> 서울
4) 10 -> 전라
5) 10 -> 충청
member의 중복허용x
but! score는 update된다. 0을 반환하기 때문에 아무일도 일어나지 않은 것으로
오해할 수 있다.
명령> zadd myzip 1 "서울"
결과> 0 0을 리턴한다
명령> zrange myzip 0 -1 withscores
결과> 1) 1 -> 서울 score가 1로 update 되었다
2) 10 -> 경기
3) 10 -> 부산
4) 10 -> 전라
5) 10 -> 충청
버전 3.0.2에서 추가된 옵션
- NX: 멤버가 이미 있으면 업데이트하지 않고 없을 경우에만 추가한다.
- XX: 이미 존재하는 멤버에 스코어를 업데이트한다.
- CH: 스코어를 업데이트한 경우에만 업데이트한 멤버수를 리턴한다. 스코어가 같으면 0을 리턴하고, 다르면 업데이트하고 1을 리턴한다. 리턴 값에만 영향을 미치는 옵션이다.
- INCR: 스코어를 주어진 값만큼 증가시킨다.
버전 6.2.0에서 추가된 옵션
- LT: 새 스코어가 현재 스코어 보다 적은 경우에만 기존 요소를 업데이트 합니다.
- GT: 새 스코어가 현재 스코어 보다 큰 경우에만 기존 요소를 업데이트 합니다.
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...] [ex seconds]
- 이 명령은 version 1.2.0 부터 사용할 수 있습니다.
- 논리적 처리 소요시간은 O(log(N))이다. N은 집합의 member 개수입니다.
- version 2.4 이후 부터 member를 여러 개 입력할 수 있습니다.
- add된 member 개수를 리턴합니다.
- 서브쿼리와 멤버 자동 삭제 기능은 Enterprise 서버에서 사용할 수 있습니다.
2. ZINCRBY key increment(정수,음수,실수) member : 해당 mem의 score를 증감한다.
명령> zadd mysite 1000 google.com 900 facebook.com 800 youtube.com
결과> 3
명령> zrevrange mysite 0 -1 withscores
결과> 0) 1000 -> google.com
1) 900 -> facebook.com
2) 800 -> youtube.com
명령> zincrby mysite 150 youtube.com youtube.com을 150 증가
결과> 950
명령> zrevrange mysite 0 -1 withscores
결과> 0) 1000 -> google.com
1) 950 -> youtube.com 950으로 증가해서 순위가 바뀌었다
2) 900 -> facebook.com
명령> zincrby mysite -60 google.com 감소
결과> 940
명령> zrevrange mysite 0 -1 withscores
결과> 0) 950 -> youtube.com
1) 940 -> google.com
2) 900 -> facebook.com
기존 key나 mem이 없을 경우 생성하고 insert된다.
이때 score의 기준은 0.0이다.
명령> zincrby daily_views 1 20160401 key와 member를 생성해서 저장
결과> 1
명령> zincrby daily_views 1 20160401
결과> 2
명령> zincrby daily_views 1 20160401
결과> 3
명령> zincrby daily_views 1 20160402 key는 만들어 졌으므로 member만 생성해서 저장
결과> 1
명령> zincrby daily_views 1 20160402
결과> 2
명령> zrevrange daily_views 0 -1 withscores
결과> 0) 2 -> 20150402
1) 3 -> 20150401
3. ZRANGE key start stop :member list를 score가 적은순으로 sort하여 조회.
명령> zadd myzip 2 "서울" 3 "부산" 5 "대구" 4 "인천" 6 "광주" 1 "경기"
결과> 6
명령> zrange myzip 0 -1 score로 sort되어 보여진다
결과> 0) 경기
1) 서울
2) 부산
3) 인천
4) 대구
5) 광주
명령> zrange myzip 0 -1 withscores withscores 옵션을 사용하면 score가 표시된다
결과> 0) 1 -> 경기
1) 2 -> 서울
2) 3 -> 부산
3) 4 -> 인천
4) 5 -> 대구
5) 6 -> 광주
4. ZRANGESTORE dest_key source_key start stop : 소스키의 값을 조회하여 목적키에 insert.
6.2버전 부터 사용가능.
명령> zadd mycity 10 Seoul 20 Busan 30 Daegu 40 Incheon 50 Gwangju 60 Gyeonggi
결과> 6
명령> zrangestore mycity2 mycity 0 -1
결과> 1) "Seoul"
2) "Busan"
3) "Daegu"
4) "Incheon"
5) "Gwangju"
6) "Gyeonggi"
명령> zrange mycity2 0 -1
결과> 1) "Seoul"
2) "Busan"
3) "Daegu"
4) "Incheon"
5) "Gwangju"
6) "Gyeonggi"
ZRANGESTORE dst src min max [ BYSCORE | BYLEX] [REV] [LIMIT offset count]
5. ZREVRANGE key start stop : mem의 list에서 큰 값부터 조회.
명령> zadd myzip 9926 "서울" 3426 "부산" 2465 "대구" 2826 "인천" 1514 "광주" 12137 "경기"
결과> 6
명령> zrevrange myzip 0 -1 withscores score가 큰 순서로 보여진다
결과> 0) 12137 -> 경기
1) 9926 -> 서울
2) 3426 -> 부산
3) 2826 -> 인천
4) 2465 -> 대구
5) 1514 -> 광주
6. ZRANGEBYSCORE key min max : score로 범위 지정하여 조회.
전부 조회시 -inf, +inf 옵션 사용.
withscores 옵션 사용 가능.
명령> zadd mycom 2009 "Sun microsystems" 1992 Wang 2002 Netscape
결과> 3
명령> zadd mycom 1998 "Digital Equipment" 2002 K-mart 1987 "American motors"
결과> 3
명령> zrangebyscore mycom -inf +inf withscores
결과> 0) 1987 -> American motors
1) 1992 -> Wang
2) 1998 -> Digital Equipment
3) 2002 -> K-mart score가 같을 경우 member로 비교한다
4) 2002 -> Netscape
5) 2009 -> Sun microsystems
명령> zrangebyscore mycom 1998 2002 withscores
결과> 0) 1998 -> Digital Equipment
1) 2002 -> K-mart
2) 2002 -> Netscape
명령> zrangebyscore mycom 2005 +inf withscores
결과> 0) 2009 -> Sun microsystems
범위 '초과', '미만' 명령어.
사용법은 zrangebyscore key (min (max
1987 < score < 2002
명령> zrangebyscore mycom (1987 (2002 withscores
결과> 0) 1992 -> Wang
1) 1998 -> Digital Equipment
명령> zrangebyscore mycom (1998 2002 withscores 1998 < score <= 2002
결과> 0) 2002 -> K-mart
1) 2002 -> Netscape
limit offset count 옵션
-> zrangebyscore key min max limit offset count
offset은 시작점을 의미, count는 조회할 mem의 개수.
count가 0이면 조회되지 않음.
명령> zrangebyscore mycom -inf +inf withscores limit 0 3
결과> 0) 1987 -> American motors
1) 1992 -> Wang
2) 1998 -> Digital Equipment
명령> zrangebyscore mycom -inf +inf withscores limit 3 100
결과> 0) 2002 -> K-mart
1) 2002 -> Netscape
2) 2009 -> Sun microsystems
ZRANGEBYSCORE key min max [withscores] [limit offset count]
7. ZRANGEBYLEX key min max : mem으로 범위 지정하여 조회.
ZREVRANGEBYLEX key min max : mem으로 범위 지정하여 역순 조회.
ZRANGEBYLEX key - + : 전부 조회
min,max에 값을 줄 경우 반드시 [ or (를 사용하여야 한다.
[ 는 포함할때 사용하고, ( 는 제외할 때 사용한다.
withscores 옵션 사용 불가.
명령> zrangebylex city - +
결과> 0) Beijing
1) New Delhi
2) New York
3) Seoul
명령> zrangebylex city "[New Delhi" +
결과> 0) New Delhi
1) New York
2) Seoul
명령> zrangebylex city "(New Delhi" +
결과> 0) New York
1) Seoul
명령> zrangebylex city "(New Delhi" "(Seoul"
결과> 0) New York
limit offset count 옵션
명령> zrangebylex city - + limit 0 2
결과> 0) Beijing
1) New Delhi
명령> zrangebylex city - + limit 2 2
결과> 0) New York
1) Seoul
ZRANGEBYLEX key min max [limit offset count]
8. ZCARD key : 키에 속한 멤버 수 반환.
ZLEN key 로 사용해도 됨.
명령> zadd myzip 9926 "서울" 3426 "부산" 2465 "대구" 2826 "인천" 1514 "광주" 12137 "경기"
결과> 6
명령> zadd myzip 1500 "강원" 2060 "충남" 2641 "경북" 570 "제주"
결과> 4
명령> zcard myzip
결과> 10 myzip에 속한 모든 member 개수 10을 리턴
9. ZCOUNT key min max : score로 범위 지정 후 개수 조회
-inf, +inf 옵션 사용하여 전체 조회 가능.
명령> zadd myzip 992 "서울" 342 "부산" 246 "대구" 282 "인천" 151 "광주" 1213 "경기"
결과> 6
명령> zadd myzip 150 "강원" 206 "충남" 264 "경북" 57 "제주"
결과> 4
명령> zcount myzip -inf +inf 집합에 속한 모든 member 수
결과> 10
명령> zcount myzip 300 +inf 인구가 3백만명 이상인 시.도 수
결과> 3
명령> zcount myzip 200 299 인구가 200만명에서 299만명 사이의 시.도 수
결과> 4
명령> zcount myzip -inf 199 인구가 199만명 이하인 시.도 수
결과> 3
10. ZLEXCOUNT key min max : mem으로 범위 지정하여 개수를 리턴
- + 옵션으로 전체 조회 가능.
min,max에 값을 줄 경우 반드시 [ or (를 사용하여야 한다.
[ 는 포함할때 사용하고, ( 는 제외할 때 사용한다.
score가 모두 같아야 원하는 결과를 조회할 수 있다.
명령> zrangebylex city - +
결과> 0) Beijing
1) New Delhi
2) New York
3) Seoul
명령> zlexcount city - +
결과> 4
명령> zlexcount city "[New Delhi" +
결과> 3
명령> zlexcount city "(New Delhi" +
결과> 2
명령> zlexcount city "(New Delhi" "(Seoul"
결과> 1
11. ZRANK key member : index(rank)를 반환한다.
ZREVRANK key member : index(rank)를 역순으로 반환한다.
score 순으로 index가 매겨지며 0부터 시작.
score가 같으면 mem으로 순서를 정한다.
명령> zrange city 0 -1 withscores
결과> 0) 50 -> New Delhi
1) 60 -> Seoul
2) 70 -> Beijing
3) 80 -> New York
명령> zrank city "Seoul"
결과> 1
명령> zrank city "New York"
결과> 3
12. ZSCORE key member : mem의 score 리턴. -> 1.2이상 버전
ZMSCORE key member1 member2 : 여러개 mem의 socre 리턴 -> 6.2이상 버전
명령> zrange city 0 -1 withscores
결과> 0) 50 -> New Delhi
1) 60 -> Seoul
2) 70 -> Beijing
3) 80 -> New York
명령> zscore city "Seoul"
결과> 60
명령> zscore city "New York"
결과> 80
13. ZREM key member : member삭제.
명령> zadd mycom 2009 "Sun microsystems" 1992 Wang 2002 Netscape
결과> 3
명령> zadd mycom 1998 "Digital Equipment" 2005 K-mart 1987 "American motors"
결과> 3
명령> zrange mycom 0 -1 withscores
결과> 0) 1987 -> American motors
1) 1992 -> Wang
2) 1998 -> Digital Equipment
3) 2002 -> Netscape
4) 2005 -> K-mart
5) 2009 -> Sun microsystems
명령> zrem mycom "American motors" "Wang" "Digital Equipment"
결과> 3
명령> zrange mycom 0 -1 withscores
결과> 0) 2002 -> Netscape
1) 2005 -> K-mart
2) 2009 -> Sun microsystems
14. ZREMRANGEBYRANK key start stop : index범위로 mem 다중 삭제
음수 사용가능.
명령> zrange myzip 0 -1 withscores
결과> 0) 1 -> New Delhi
1) 2 -> Seoul
2) 3 -> Beijing
3) 4 -> New York
명령> zremrangebyrank myzip 1 2
결과> 2
명령> zrange myzip 0 -1 withscores
결과> 0) 1 -> New Delhi
1) 4 -> New York
15. ZREMRANGEBYSCORE key min max : score로 범위 지정하여 mem삭제.
-inf, +inf 옵션 사용가능.=> 전체 삭제.
min,max 값을 제외하려면 앞에 (를 사용한다.]
명령> zadd city 50 "New Delhi" 60 "Seoul" 70 "Beijing" 80 "New York"
결과> 4
명령> zrangebyscore city -inf inf withscores
결과> 0) 50 -> New Delhi
1) 60 -> Seoul
2) 70 -> Beijing
3) 80 -> New York
명령> zremrangebyscore city -inf (70
결과> 2
명령> zrangebyscore city -inf inf withscores
결과> 0) 70 -> Beijing
1) 80 -> New York
명령> zremrangebyscore city -inf 70
결과> 1
명령> zrangebyscore city -inf inf withscores
결과> 0) 80 -> New York
16. ZREMRANGEBYLEXkey min max : mem으로 범위 지정 후 삭제.
ZRANGEBYLEX key - + : 전부 조회
min,max에 값을 줄 경우 반드시 [ or (를 사용하여야 한다.
[ 는 포함할때 사용하고, ( 는 제외할 때 사용한다.
score가 모두 같아야 원하는 결과를 얻을 수 있음.
명령> zadd city 0 "New Delhi" 0 "Seoul" 0 "Beijing" 0 "New York"
결과> 4
명령> zrangebylex city - +
결과> 0) Beijing
1) New Delhi
2) New York
3) Seoul
명령> zremrangebylex city "(New Delhi" "(Seoul"
결과> 1
명령> zrangebylex city - +
결과> 0) Beijing
1) New Delhi
2) Seoul
명령> zremrangebylex city "[New Delhi" "(Seoul"
결과> 1
명령> zrangebylex city - +
결과> 0) Beijing
1) Seoul
명령> zremrangebylex city "[New Delhi" "[Seoul"
결과> 1
명령> zrangebylex city - +
결과> 0) Beijing
17. ZUNION 2 key1 key2 : 합집합.
ZINTER 2 key1 key2 : 교집합
ZDIFF 2 key1 key2 : 차집합
각 mem의 score는 지정하지 않으면 더해진다. (합,교,차집합 전부 동일)
ex)
src_key1 = | { (1,A), | (2,B), | (3,C) | } | |
src_key2 = | { | (4,B), | (5,C) | (6,D) | } |
결과 = | { (1,A), | (6,B), | (8,C), | (6,D) | } |
명령> zunion 2 src_key1 src_key2 withscores
결과> 1) "A"
2) "1"
3) "B"
4) "6"
5) "D"
6) "6"
7) "C"
8) "8"
weights 옵션?
사용법은 zunion 2 src_key1 src_key2 weights 2 3 이다.
첫 번째 weight 2는 src_key1의 각 score에 곱해지고, 두 번째 weight 3는 src_key2의 각 score에 곱해진다.
src_key1 = | { (1,A), | (2,B), | (3,C) } | -> | { (1*2,A) (2*2,B) | (3*2,C) } | |
src_key2 = | { | (4,B), | (5,C), | (6,D) } | -> | { (4*3,B) | (5*3,C) (6*3,D) } |
결과 | = | { (2,A) (4+12,B) | (6+15,C) (18,D) } | ||||
= | { (2,A) (16,B) | (21,C) (18,D) } |
명령> zunion 2 src_key1 src_key2 weights 2 3 withscores
결과> 1) "A"
2) "2"
3) "B"
4) "16"
5) "D"
6) "18"
7) "C"
8) "21"
aggregate 옵션?
사용법은 zunion 2 src_key1 src_key2 aggregate sum|min|max 이다.
sum은 각 score를 합한다. aggregate를 지정하지 않으면 sum 이 default이므로 sum으로 계산된다.
min은 각 member에서 적은 score를 취하고,
max는 큰 score를 취한다.
src_key1 = | { (1,A), | (2,B), | (3,C) } | |
src_key2 = | { | (4,B), | (5,C), | (6,D) } |
aggregate min = | { (1,A) | (2,B), | (3,C), | (6,D) } |
aggregate max = | { (1,A) | (4,B), | (5,C), | (6,D) } |
명령> zunion 2 src_key1 src_key2 aggregate min withscores
결과> 1) "A"
2) "1"
3) "B"
4) "2"
5) "C"
6) "3"
7) "D"
8) "6"
명령> zunion 2 src_key1 src_key2 aggregate max withscores
결과> 1) "A"
2) "1"
3) "B"
4) "4"
5) "C"
6) "5"
7) "D"
8) "6"
ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
18. ZUNIONSTORE dest_key2src_key1 src_key2 : 합집합 구한후 dest key에 저장.
ZINTERSTORE dest_key2src_key1 src_key2 : 교집
ZDIFFSTORE dest_key2src_key1 src_key2 : 차집합 -> 6.2버전에서 사용가능.
각 mem의 score는 지정하지 않으면 더해진다
weights, aggregate 옵션 사용 가능.
soure key를 목적지로 사용하여 소스키 삭제 후 결과만 insert가 가능.
ZUNIONSTORE src_key1 2 src_key1 src_key2
ZUNIONSTORE dest_key numkeys src_key [src_key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
19. ZSCAN key cursor : mem이 많을 경우 지정하여 반복 조회. -> 2.8버전부터 사용가
명령> zadd myzip 1 A1 2 A2 3 A3 4 B1 5 B2 6 B3 7 C1 8 C2 9 C3
결과> 9
명령> sscan myset 0
결과> next cursor -> 0
0) 1 -> A1
1) 2 -> A2
2) 3 -> A3
...
8) 9 -> C3
count, pattern옵션 사용 가능.
명령> zscan myzip 0 count 5
결과> next cursor -> 0
0) E1
1) A2
2) C2
...
8) 9 -> C3
명령> zscan myset 0 match B*
결과> next cursor -> 0
0) 4 -> B1
1) 5 -> B2
2) 6 -> B3
ZSCAN key cursor [MATCH pattern] [COUNT count]
20. ZPOPMIN key count : 작은 값 부터 count 수만큼 꺼내옴.(조회 후 삭제됨.) -> 5.0.0버전 부터.
ZPOPMAX key count
BZPOPMIN key timeout : timout동안 데이터 들어오면 꺼내옴. 이미 있을경우 바로 꺼내옴. BLPOP과 같음.
BZPOPMAX key timeout
21. ZISMEMBER key member : mem있는지 확인. -> ent버전만 사용가능.
존재 시 : 1 반환
없을 때 : 0 반환.
22. ZRANDMEMBER key : 임의 멤버 조회. -> 6.2버전 사용 가능.
명령> zadd mycity 10 Seoul 20 Busan 30 Daegu 40 Incheon 50 Gwangju 60 Gyeonggi
결과> 6
명령> zrandmember mycity
결과> Gyeonggi
count 옵션 사용 가능.
명령> zrandmember mycity 3
결과> 1) "Gyeonggi"
2) "Seoul"
3) "Daegu"
명령> zrandmember mycity -3
결과> 1) "Incheon"
2) "Incheon"
3) "Seoul"
ZRANDMEMBER key [count [withscores]]
'Redis' 카테고리의 다른 글
Redis - sentinel (1) | 2024.06.18 |
---|---|
Redis - Hashes (0) | 2024.06.16 |
Redis - Sets (0) | 2024.06.16 |
Redis - Lists 데이터 타입, 명령어 (2) | 2024.06.16 |
Redis - String 데이터 타입, 명령어 (0) | 2024.06.16 |