zadd
ZADD
![]() |
![]() |
![]() |
---|
집합에 데이터를 score와 함께 추가
사용법은 zadd key score member 이다.
sadd에서 score가 추가된 형태이다.
score는 반드시 숫자여야 한다. 문자는 입력할 수 없다.
Example
명령> | 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의 정수 범위는 -9007199254740992 -(2^53) 부터 9007199254740992 +(2^53) 이고, 실수 범위는 Double precision floating point number 입니다. |
---|
withscores 옵션을 사용했을때 redis-cli는 value와 score가 각각 다른 line에 표시되는 반면, Redis Web Client는 위 결과와 같이 한 line에 score -> value 형태로 표시된다. |
score member를 여러 개 입력 가능
사용법은 zadd key score member score member 이다.
Example
명령> | zadd myzip 100 "충청"80 "전라" |
결과> | 2 |
명령> | zrange myzip 0 -1 withscores |
결과> |
1) 20 -> 서울 2) 40 -> 부산 3) 60 -> 경기 4) 80 -> 전라 5) 100 -> 충청 |
score가 같으면 member로 sort 됨
Example
명령> | 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의 중복은 허용되지 않으나
score는 update 된다. 하지만 0을 리턴하므로 score도 update하지 않는 것으로 오해할 수 있다.
Example
명령> | zadd myzip 1 "서울" |
결과> | 0 0을 리턴한다 |
명령> | zrange myzip 0 -1 withscores |
결과> |
1) 1 -> 서울 score가 1로 update 되었다 2) 10 -> 경기 3) 10 -> 부산 4) 10 -> 전라 5) 10 -> 충청 |
Subquery(서브쿼리) 기능
Member(멤버) 부분에 서브쿼리를 사용해서 값을 넣을 수 있습니다.
서브쿼리로 사용할 수 있는 명령은 GET, MGET, LPOP, RPOP, LRANGE,
SMEMBERS, SUNION, SINTER, SDIFF, ZRANGE, ZREVRANGE,
HGET, HMGET, HKEYS, HVALS, HGETALL, LS 입니다.
대부분의 경우 스코어는 0이 들어갑니다. 그러면 멤버로 소트됩니다.
Example
명령> | set key Hello |
결과> | OK |
명령> | zadd zset1 (get key) |
결과> | 1 |
명령> | zrange zset1 0 -1 withscores |
결과> | 1) "Hello" 2) "0" |
- 서브쿼리에 다양한 명령을 사용해서 여러 개 값을 넣을 수 있습니다.
- LIST 또는 SET의 경우 멤버로 소트하고 싶을 경우 사용하면 좋습니다.
- ZRANGE, ZREVRANGE 명령에 withscores 옵션을 사용하면 스코어를 넣을 수 있습니다.
- LS 명령에 memory 옵션을 사용하면 memory로 소트되어 메모리를 많이 쓰는 키를 확인할 수 있고, len 옵션을 사용하면 멤버수가 많은 혹은 적은 키를 확인할 수 있습니다.
Example
명령> | zadd zset1 (lrange mylist2 0 -1) |
결과> | 8 |
명령> | zadd zset1 (sunion myset1 myset2) |
결과> | 7 |
명령> | zadd zset1 (zrange myzset1 0 -1) |
결과> | 6 |
명령> | zadd zset1 (zrange myzset2 0 -1 withscores) |
결과> | 6 |
명령> | zadd zset1 (hmget myhash1 field1 field2) |
결과> | 2 |
명령> | zadd zset1 (ls * memory) |
결과> | 2 |
명령> | zadd zset1 (ls * len) |
결과> | 2 |
명령> | zadd zset1 (ls * zset memory) |
결과> | 2 |
서브쿼리 기능은 Enterprise 서버에서 사용 가능합니다. Enterprise 7.2.0까지는 ZADD 명령에서 사용할 수 있고, 이후 버전에서는 ZADDS 명령으로 분리되었습니다. |
멤버(member) 자동 삭제(만료 시간 설정) 기능
입력하는 멤버에 만료 시간을 설정해서 자동 삭제할 수 있습니다.
이것은 기존에 zadd(입력)과 expire를 각각 했던 것을 한 명령으로 만들었습니다.
Example
명령> | zadd myzset 10 mem10 20 mem20 30 mem30 ex 10 |
결과> | 3 |
10초 후 | |
명령> | zrange myzset 0 -1 |
결과> | (empty list or set) |
서브쿼리에도 사용할 수 있습니다.
Example
명령> | zadd myzset (get key) ex 10 |
결과> | 1 |
명령> | zadd myzset (lrange mylist 0 -1) ex 10 |
결과> | 10 |
멤버 자동 삭제 기능은 Enterprise 서버에서 사용 가능합니다. |
버전 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 서버에서 사용할 수 있습니다.
SQL Insert | Redis Enterprise 7.3.0 이상이면 INSERT를 사용해보세요. |
관련 명령 | ZRANGE, ZREM, SADD, LPUSH, HSET |
Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
<< SORTED SETS Introduction | ZADD | ZADDS >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.