Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

  • 사용가능한 버전 : 1.2.0 이상
  • 시간복잡도 : 아이템 추가는 O(log(N))이다. N은 sorted set에 저장된 아이템의 갯수다.
특정 키에 멤버를 추가 할 수 있다. 멤버를 추가 할 때는 스코어(score)를 설정 할 수 있다. 멤버는 스코어를 기준으로 정렬되서 저장된다. 이미 존재하는 멤버라면 멤버의 스코어가 업데이트되며, 재 정렬된다. 스코어&멤버 쌍으로 저장이 되며, 하나 이상을 설정 할 수 있다.

key 가 없다면, 새로운 key가 만들어지고 첫 멤버가 추가된다. 스코어는 부동 소수점 숫자여야 한다.

ZADD 옵션 (Redis 3.0.2 이상)

ZADD는 키 이름 다음에 몇 개의 옵션을 설정 할 수 있다. 옵션은 아래와 같다.
  • XX : 이미 멤버가 존재할 때만 업데이트를 한다. 멤버가 없다면 추가하지 않는다.
  • NX : 이미 멤버가 존재할 경우 업데이트를 하지 않는다. 항상 새 멤버를 추가한다.
  • INCR : ZINCRBY와 같은 역할을 한다. 스코어를 기존 스코어에 더한다.
  • CH : 몇 개의 멤버의 값이 업데이트 됐는지를 출력한다.

정수 범위

REDIS sorted set은 double 64 비트 부동 소숫점을 이용해서 스코어(score)를 나타낸다. 값은 -2^53 에서 2^53 사이의 정수를 정확히 표현 할 수 있는 IEEE 754 부동 소수점 숫자로 표현된다. -9007199254740992에서 9007199254740992 사이의 정수를 완벽하게 나타낼 수 있다. 이 보다 더 정수는 내부적으로 지수 형식으로 표현하기 때문에 근사치 값만을 얻을 수 있다.

Sorted sets 기본

Sorted sets은 스코어를 기준으로 오름차순으로 정렬된다. 동일한 멤버는 하나만 존재할 수 있다. 추가하려는 멤버가 이미 존재해서 기존 스코어를 업데이트 할 경우 새로 정렬이 된다. 이전 스코어를 기준으로 상대적인 값으로 업데이트를 하고 싶다면 ZINCRBY를 사용한다.

멤버의 스코어는 ZSCORE 명령으로 검색 할 수 있다. ZSCORE 명령은 멤버가 존재하는지를 확인하는 용도로도 사용 할 수 있다.

값은 스코어를 가지는 멤버의 추가

Sorted sets에는 오로지 모든 멤버가 유일하다. 동일한 2개 이상의 멤버가 존재 할 수 없다. 하지만 같은 스코어를 가지는 멤버는 존재할 수 있다. 같은 스코어를 가지는 여러 멤버가 존재할 경우 이 멤버들은 사전순으로 정렬된다.(즉 우선 스코어에 따라 정렬이되며, 스코어가 같을 경우 사전을 기준으로 정렬된다.)

ZRANGEBYLEX명령을 사용하면, 멤버에 대한 범위 쿼리가 가능하다. 또한 ZRANGEBYSCORE를 사용해서 스코어 범위별로 정렬된 검색을 할 수 있다.

리턴 값

Integer 정수 값을 리턴한다.
  • Sorted Set에 추가된 멤버의 갯수다. 같은 이름의 멤버가 있을 경우, 스코어만 업데이트 되며 추가 멤버 갯수에는 포함되지 않는다.
INCR 옵션이 설정됐을 경우 업데이트된 스코어가 리턴된다.

예제

>  ZADD myzset 1 "one"
(integer) 1
>  ZADD myzset 1 "uno"
(integer) 1
>  ZADD myzset 2 "two" 3 "three"
(integer) 2
>  ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
>  

응용

참고