이 튜토리얼에서는 Redis ZADD 명령어를 사용하여 키에 저장된 정렬된 셋(sorted set) 값에 요소를 생성하고 추가하는 방법을 알아봅니다.
ZADD 명령어는 지정된 키에 저장된 정렬된 셋에 하나 이상의 요소와 각각의 점수(score)를 추가하는 데 사용됩니다. 만약 지정한 요소가 이미 존재한다면 해당 요소의 점수가 업데이트되고, 올바른 순서를 유지할 수 있도록 적절한 위치에 다시 삽입됩니다. 점수 값은 배정밀도 부동 소수점(double precision floating point) 숫자의 문자열 형태여야 하며, +inf와 -inf 값도 유효하게 사용할 수 있습니다.
키가 데이터스토어에 존재하지 않으면, 삽입 작업을 수행하기 전에 새로운 정렬된 셋이 먼저 생성됩니다. 반면 키는 존재하지만 저장된 값이 정렬된 셋 데이터 타입이 아닌 경우에는 오류가 반환됩니다.
ZADD 명령어의 선택적 인자(Options)
Redis ZADD 명령어는 다음과 같은 선택적 인자를 지원합니다.
- XX : 정렬된 셋에 이미 존재하는 요소만 업데이트하며, 새로운 요소는 절대 추가하지 않습니다.
- NX : 정렬된 셋에 새로운 요소만 추가하며, 기존에 존재하는 요소는 업데이트하지 않습니다.
- CH : 반환값을 '새로 추가된 요소 수'에서 '변경된 요소의 총 개수'로 변경합니다. 여기서 변경된 요소란 새로 추가된 요소와 점수가 업데이트된 기존 요소를 의미합니다. 따라서 명령어 실행 시 지정된 요소 중 과거와 동일한 점수를 가진 요소는 개수에 포함되지 않습니다.
- INCR : 이 옵션을 지정하면 ZADD가 ZINCRBY 명령어처럼 동작합니다. 이 모드에서는 하나의 score-element 쌍만 지정할 수 있으며, 키가 이미 존재하는 경우에만 값을 설정합니다.
정렬된 셋의 요소들은 점수를 기준으로 오름차순으로 정렬됩니다. 점수가 동일한 요소들 사이에는 사전순(lexicographical order) 순서가 유지됩니다.
기본 문법(Syntax)
redis host:post> ZADD <key> [XX|NX] [CH] [INCR] <score> <member> [<score> <member>]
반환값(Output)
- (integer): 정렬된 셋에 새로 추가된 요소의 개수를 반환하며, 이미 존재했던 요소는 포함되지 않습니다. - error: 키가 존재하지만 키에 저장된 값이 정렬된 셋이 아닌 경우 반환됩니다.
사용 예제(Example)

참고 자료(References)
- ZADD 공식 문서(ZADD Command Docs)
지금까지 Redis 데이터스토어에 저장된 정렬된 셋 값에 요소를 생성하고 추가하는 방법에 대해 알아보았습니다. 내용이 유용했다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!