본문 바로가기
DB/Redis

Redis 기본정리 4

by COCO1337 2021. 1. 8.

Redis Sorted sets

Sorted set은 Set, Hash와 비슷하다. 셋처럼 unique 하고, non-repeating string 원소들이다. set에서는 정렬되어 있지 않지만 sorted set에서는 모든 원소는 부동소수점 값에 연관되어 정렬되어 있다(모든 원소들이 어떤 값으로 매핑되어 있기 때문에 Hash와도 비슷하다).

원소들은 순서를 가지고 있고 그 순서를 정하는 규칙은

1. A와 B가 서로 다른 score를 가지고 있을때 A.score > B.score이면 A > B이다.

2. A와 B가 같은 score를 갖고 있을 때 사전 순서에 따라 먼저나오는것 > 나중에 나오는 것 순서로 정해진다. sorted set에서 각 원소들은 unique 하기 때문에 A와 B는 같을 수 없다.

 

ZADD는 SADD와 비슷하지만 score를 위한 argument를 1개 더 입력받는다. 또한 여러개의 score-value 쌍을 한번에 추가할 수 있다.

Sorted sets are implemented via a dual-ported data structure containing both a skip list and a hash table, so every time we add an element Redis performs an O(log(N)) operation.

 

역순으로 출력하려면 ZREVRANGE를 사용한다.

 

withscores 옵션으로 score도 확인할 수 있다.

 

ZRANGESCORE 명령어로 score 범위를 정해 원하는 구간만 검색할 수 있다.

 

ZREMRANGEBYSCORE 명령어로 score 범위 안의 원소들을 삭제할 수 있다.

 

ZRANK 명령어를 사용해 해당 멤버가 sorted set 안의 몇번째 순위인지 알 수 있다.

또한 ZREVRANK를 사용해 역순위를 알 수 있다.

 

사전적 score

만약 원소들의 점수가 같다면 ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, ZLEXCOUNT를 통해 원소들을 사전순서로 접근할 수 있다.

일반적인 ZRANGE의 경우

ZRANGEBYLEX 명령어로 원소들을 사전순서로 검색

(검색 조건 등은 나중에 documentation 참고해서 정리)

Redis에서는 big endian 의 128비트 숫자를 사용한다.

 

Sorted Set의 score는 언제나 변경이 가능하다. ZADD 명령어를 사용해 이미 존재하는 원소의 score를 바꿀 수 있고, O(log(N))의 복잡도를 갖게 된다. (점수를 이용해 랭킹을 표시하는데 사용할 수 있음, #213번째 등등)

반응형

'DB > Redis' 카테고리의 다른 글

Redis 외부접속 설정하기  (0) 2021.01.11
Redis 기본정리 5  (0) 2021.01.08
Redis 기본 정리3  (0) 2021.01.08
Redis 기본정리 2  (0) 2021.01.07
Redis 기본 정리  (0) 2021.01.07

댓글