ZADD

Redis Developer Course Redis Technical Support Redis Enterprise Server

집합에 데이터를 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 -> 경기

애니메이션 보기

Note 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 답글이 올라오면 이메일로 알려드리겠습니다.