Database/NoSQL

[redis] 레디스 데이터 타입 - SortedSet (정렬된세트)

코딩for 2022. 10. 6. 10:39
반응형

Redis 정렬 세트

Redis 정렬 집합 소개

Redis 정렬 세트는 연관된 점수로 정렬된 고유한 문자열(구성원) 모음입니다. 둘 이상의 문자열에 동일한 점수가 있는 경우 문자열은 사전순으로 정렬됩니다. 정렬된 세트의 일부 사용 사례는 다음과 같습니다.

  • 리더보드. 예를 들어, 정렬된 세트를 사용하여 대규모 온라인 게임에서 가장 높은 점수의 정렬된 목록을 쉽게 유지할 수 있습니다.
  • 속도 제한기. 특히 정렬된 세트를 사용하여 슬라이딩 윈도우 속도 제한기를 구축하여 과도한 API 요청을 방지할 수 있습니다.

  • 플레이어의 점수가 변경되면 실시간 순위표 업데이트:
> ZADD leaderboard:455 100 user:1
(integer) 1
> ZADD leaderboard:455 75 user:2
(integer) 1
> ZADD leaderboard:455 101 user:3
(integer) 1
> ZADD leaderboard:455 15 user:4
(integer) 1
> ZADD leaderboard:455 275 user:2
(integer) 0

의 점수 user:2는 최종 ZADD호출에서 업데이트됩니다.

  • 상위 3명의 플레이어 점수 얻기:
> ZRANGE leaderboard:455 0 2 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
  • 사용자 2의 순위는 무엇입니까?
> ZREVRANK leaderboard:455 user:2
(integer) 0

기본 명령

  • ZADD정렬된 집합에 새 구성원 및 관련 점수를 추가합니다. 구성원이 이미 있는 경우 점수가 업데이트됩니다.
  • ZRANGE지정된 범위 내에서 정렬된 정렬된 집합의 구성원을 반환합니다.
  • ZRANK정렬이 오름차순이라고 가정하고 제공된 멤버의 순위를 반환합니다.
  • ZREVRANK정렬된 집합이 내림차순이라고 가정하고 제공된 멤버의 순위를 반환합니다.

정렬된 집합 명령의 전체 목록을 참조하십시오 .

성능

대부분의 정렬된 집합 연산은 O(log(n))이며, 여기서 n 은 구성원 수입니다.

ZRANGE큰 반환 값(예: 수만 개 이상)으로 명령을 실행할 때는 약간의 주의를 기울이 십시오. 이 명령의 시간 복잡도는 O(log(n) + m)이며, 여기서 m 은 반환된 결과의 수입니다.

대안

Redis 정렬 세트는 때때로 다른 Redis 데이터 구조를 인덱싱하는 데 사용됩니다. 데이터를 인덱싱하고 쿼리해야 하는 경우 RediSearch  RedisJSON 을 고려하세요 .

더 알아보기

 

참고(번역) : https://redis.io/docs/data-types/sorted-sets/

 

Redis sorted sets

Introduction to Redis sorted sets

redis.io

 

반응형