이 기사는 효율적인 리더 보드 구현을 위해 Redis 정렬 세트를 사용하는 것을 보여줍니다. 주요 작업에 대한 O (LOG N) 복잡성을 강조하는 목록, 해시 테이블 및 관계형 데이터베이스보다 성능 장점을 강조합니다. 효율적인 s
Redis 정렬 세트는 실내에서 멤버 (플레이어, 사용자 등)가 관련 점수 (리더 보드 순위)를 저장하기 때문에 리더 보드를 구현하는 데 이상적입니다. ZADD
명령을 사용하면 멤버와 점수를 효율적으로 추가하거나 업데이트 할 수 있습니다. 그런 다음 ZRANGE
, ZREVRANGE
, ZRANGEBYSCORE
및 ZREVRANGEBYSCORE
와 같은 명령을 사용하여 범위 쿼리를 수행합니다.
예를 들어, 게임을위한 리더 보드를 구축한다고 가정 해 봅시다. 우리는 그들의 ID를 회원으로 사용하고 점수를 정렬 된 세트의 점수로 사용하는 플레이어를 대표 할 수 있습니다.
ZADD leaderboard 100 player1 200 player2 50 player3
이것은 각각 100, 200 및 50 점으로 리더 보드에 3 명의 선수를 추가합니다.ZREVRANGE leaderboard 0 4 WITHSCORES
이렇게하면 내림차순으로 상위 5 명의 선수 (점수)가 가장 높습니다 (가장 높은 점수).ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
이것은 지정된 범위 내에서 모든 플레이어를 반환합니다.Redis 정렬 세트는 최적화 된 내부 구조로 인해 리더 보드의 다른 데이터 구조에 비해 상당한 성능 이점을 제공합니다. 비교는 다음과 같습니다.
Redis 정렬 세트에서 점수와 순위를 업데이트하는 것은 ZADD
명령 덕분에 매우 효율적입니다. ZADD
원자 적으로 멤버의 점수를 업데이트합니다. 멤버가 존재하지 않으면 주어진 점수가있는 멤버를 추가합니다. 존재하면 점수가 업데이트됩니다. 이는 동시성이 높은 경우에도 데이터 일관성을 보장합니다.
예를 들어, Player1의 점수를 150으로 업데이트하려면 : ZADD leaderboard 150 player1
점수를 높이거나 감소시켜야하는 시나리오의 경우 ZINCRBY
명령이 더 효율적입니다. ZINCRBY leaderboard 50 player1
Player1의 점수를 50으로 증가시킵니다.
대규모 리더 보드를 효율적으로 유지하려면 다음과 같은 전략을 고려하십시오.
Redis 정렬 세트는 Pagination 및 필터링에 대한 탁월한 지원을 제공합니다. Pagination은 ZRANGE
및 ZREVRANGE
명령을 LIMIT
절을 사용하여 쉽게 달성 할 수 있습니다.
ZREVRANGE leaderboard 0 9 WITHSCORES
상위 10 명의 플레이어를 검색합니다.
ZREVRANGE leaderboard 10 19 WITHSCORES
플레이어가 11-20 순위를 차지합니다.
필터링은 ZRANGEBYSCORE
사용하여 수행하고이를 페이지 매김 LIMIT
과 결합 할 수 있습니다.
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES LIMIT 0 10
100에서 200 사이의 점수로 상위 10 명의 플레이어를 검색합니다.
보다 복잡한 필터링 기준 (예 : 다중 속성에 의한 필터링)을 위해서는 다른 필터링 기준에 따라 별도의 정렬 세트를 사전 컴퓨팅하거나 유지 관리하거나 Redis 데이터 구조 및 응용 프로그램 측로를 조합해야 할 수도 있습니다. 예를 들어, 다른 게임 모드 또는 지역에 별도의 정렬 세트를 사용할 수 있습니다.
위 내용은 리더 보드 및 범위 쿼리에 Redis 정렬 세트를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!