ZSET은 Sorted Set으로 세트와 정렬된 목록의 기능을 결합한 Redis의 강력한 데이터 구조이다. 요소를 추가, 제거 또는 업데이트할 수 있으며, 항상 점수 또는 순위로 정렬된 순서를 유지한다. 이러한 특성 덕분에 쉽게 랭킹 시스템 구현이 가능하며 관리가 간편하다.
여기서는 ZSET의 대표적인 함수 몇 가지를 정리하려고 한다.
1. ZINCRBY : 점수 증가 및 감소
특정 멤버의 점수를 증가시키거나 감소시키는 데 사용한다. 멤버가 존재하지 않으면 자동으로 추가된다.
redis_client.zincrby(key, increment, member)
#점수 증가
redis_client.zincrby('ranking', 10, 'player1')
#점수 감소
redis_client.zincrby('ranking', -5, 'player1')
- 'ranking'이라는 ZSET에서 'player1'의 점수를 10 증가도 가능하고 반대로 -5로 감소도 가능하다.
- 멤버가 없는면 자동으로 추가된다.
2. ZRANGE : 점수 오름차순 조회
ZSET에서 점수가 낮은 순서대로(오름차순) 멤버를 조회한다.
#점수가 낮은 순서대로
redis_client.zrange( key, start, stop, WITHSCORES)
#하위 3명을 출력
redis_client.zrange('ranking', 0, 2, WITHSCORES=True)
#출력 예시
[('player3', 5.0), ('player1', 10.0), ('player2', 15.0)]
- 'ranking'이라는 ZSET에서 점수가 낮은 하위 3명을 출력.
- WITHSCORES=True를 설정하면 점수도 함께 출력된다(기본값은 False).
3. ZREVRANGE : 점수 내림차순 조회
ZSET에서 점수가 높은 순서대로(내림차순) 멤버를 조회한다. ZREVRANGE에서 REV는 REVerse 역순을 의미 한다.
#점수가 높은 순서대로
redis_client.zrevrange( key, start, stop, WITHSCORES)
#상위 3명을 출력
redis_client.zrange('ranking', 0, 2, WITHSCORES=True)
#출력 예시
[('player2', 15.0), ('player1', 10.0), ('player2', 5.0)]
- 'ranking'이라는 ZSET에서 점수가 낮은 상위 3명을 출력.
- WITHSCORES=True를 설정하면 점수도 함께 출력된다(기본값은 False).
Python-Redis-Commands-ZREVRANGE
4. ZSCORE : 특정 사용자 점수 조회
ZSET에서 특정 멤버의 점수를 조회할 때 사용한다.
#특정 사용자 조회
redis_client.zscore( key, member )
#player2 점수 조회
redis_client.zrange('ranking','player2 )
#출력 예시
15.0
- 'player2'의 점수를 조회
5. ZADD : 멤버 추가 및 점수 업데이트
ZSET에 멤버와 점수를 추가하거나, 기존 멤버의 점수를 업데이트한다.
#사용자 추가
redis_client.zadd( key, {member: score} )
#player1과 player2 추가
redis_client.zadd('ranking', {'player1': 10, 'player2':30})
- 'ranking'이라는 ZSET에 'player1'은 10점, 'player2'은 30점으로 추가
6. ZREM : 멤버 삭제
ZSET에서 특정 멤버를 삭제할 때 사용한다. 한 번에 여러 멤버를 삭제할 수도 있다.
#사용자 삭제
redis_client.zrem( key, member)
#player1과 player2 삭제
redis_client.zadd('ranking', 'player1', 'player2')
- 'ranking'이라는 ZSET에 'player1'과 'player2'를 삭제
마무리
ZSET은 Redis의 유연하고 강력한 데이터 구조로, 랭킹 시스템부터 다양한 정렬된 데이터 관리에 활용할 수 있다. Z로 시작하는 함수는 대부분 ZSET 관련이므로, 필요에 따라 문서를 참고해 적합한 명령어를 선택해서 사용하면 좋다.
'Python' 카테고리의 다른 글
[TIL]내이배움캠프 - DRF + React 좋아요 기능 (0) | 2024.05.10 |
---|---|
[TIL]24.02.29 내일배움캠프 3주차 + 3과제 Class (1) | 2024.03.01 |