redis Sorted Sets

2021. 4. 11. 02:54 NoSQL/redis

개요

key 하나에 여러개의 score와 value로 구성 됩니다. key 집합 내에  value는 중복되지 않습니다.

Sorted Sets에서는 집합이라는 의미에서 value를 member라 부릅니다.

value는 score로 sort 되며 skip list를 사용하여 member의 수와 상관 없이 고성능 sorting을 제공합니다.

 

 

명령어 요약

저장 :ZADD

ZADD : ZADD key score member [score member ...] 예) zadd usersorted 5 "홍길동1" 90 "홍길동2"  , 결과 적용된 member수 리턴됩니다.

score는 숫자 여야 합니다. score의 범위는 -9007199254740992 부터 9007199254740992 입니다.

score가 같으면 member 이름으로 sort됩니다.

member는 중복되지 않으나 중복된다면 score만 갱신 됩니다. 이때 결과값은 0으로 리턴 됩니다. (socre 수정이 이루어집니다.)

 

조회 :ZCARD, ZSCAN

ZCARD : zcard key 예) zcard usersorted , key에 속한 member의 개수를 리턴합니다.

ZSCAN : ZSCAN key cursor [MATCH pattern] [COUNT count] 예) member가 많은 경우 커서를 지정해서 반복 조회하는 기능 입니다.

zrange key start, stop로 반복 조회하는 것과 비슷합니다.

 

삭제 :ZREM, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZREMRANGEBYLEX

ZREM :  zrem key member1 member1 예) zrem usersorted "홍길동1" "홍길동2" , key의 members를 삭제 합니다.

ZREMRANGEBYRANK : zremrangebyrank key start stop 예) zremrangebyrank usersorted  1 2, index 범위로 member삭제 합니다.

start stop 는 index이 이며 1base 의 정수힙니다.

index에 음수 사용이 가능 하며, 제일 마지막 member가 -1, 그 다음이 -2 순으로 지정 됩니다.

ZREMRANGEBYSCORE : zremrangebyscore key min max 예) zremrangebyscore usersorted 11 20,

score로 범위를 지정해서 member 삭제 합니다. 기본적으로 min, max를 포함한 범위에서 삭제 합니다.

모두 삭제 하려면 min max에 -inf +inf를 사용하면 됩니다.

zremrangebyscore usersorted 11 (20, 11 이상 20 미만 삭제, ( 를 사용하여 min/max값을 범위에서 제외할 수 있습니다.

ZREMRANGEBYLEX :  zremrangebylex key min max 예) zremrangebylex usersorted "홍길동1" "홍길동2"

min max는 member의 이름 범위, 모두 삭제 하려면 - + 를 사용하면 됩니다.

member 이름 앞에 반드시 [ 혹은 ( 를 사용해야 합니다.

[ 는 포함 할때, ( 는 제외 할때 사용 합니다.

socre값이 같아야 원하는 결과를 얻을 수 있습니다.

 

index로 조회 : ZRANGE, ZREVRANGE

ZRANGE : ZRANGE key start stop [withscores] 예) zrange usersorted 0 3, sort된 member를 조회 합니다.

zrange usersorted 0 -1 , stop에 -1을 사용하여 전체 조회가 가능합니다. index가 작은 값부터 0,1,2.. 순입니다.

witsocres 를 사용하면 score가 같이 조회 됩니다.

index는 0 base 입니다. (1 5 번 2번째 부터 6번째를 의미 합니다.)

score가 같으면 member 이름으로 sort 됩니다.

ZREVRANGE : ZREVRANGE key start stop [withscores] 예) zrevrange usersorted 0 3

score 가 큰순으로 조회 되며, ZRANGE 와 score 역순 기준인 것 만 다르고 동일한 기능을 제공 합니다.

 

score로 조회 : ZRANGEBYSCORE, ZCOUNT, ZREVRANGEBYSCORE

ZRANGEBYSCORE : ZRANGEBYSCORE key min max [withscores] [limit offset count] , score로 범위를 지정해서 조회 합니다.

예) zrangebyscore usersorted -inf +inf withscores limit 0 7,  전체에서 제일 낮은것부터 7개 조회 합니다.

min,max 는 score 범위 이고 -inf, +inf는 모두 조회. ( 를 사용하면 초과, 미만을 의미 합니다.

ZCOUNT :  zcount key min max 예) zcount usersorted -inf +inf, 점수로 조회 합니다.

ZREVRANGEBYSCORE : ZREVRANGEBYSCORE key max min [withscores] [limit offset count] , score가 큰순으로 조회 됩니다.

ZRANGEBYSCORE 와 score 기준만 다르고 동이한 기능을 제공 합니다.

 

member로 조회 :ZRANGEBYLEX, ZLEXCOUNT, ZREVRANGEBYLEX, ZRANK, ZREVRANK, ZSCORE

ZRANGEBYLEX : ZRANGEBYLEX key min max [limit offset count] 예) zrangebylex usersorted - + limit 0 10,

min, max에 모두 조회시 - + 를 사용 합니다. name 사용시 반드시 [ 또는 ( 를 사용해야 합니다.

[ 는 포함, ( 는 제외할 때 사용합니다.

offset은 0부터 시작, count는 1이상이어야 합니다. page 별 조회에 유용하게 사용할 수 있습니다.

이 명령에는 withsocres 옵션이 없습니다.

ZLEXCOUNT : zlexcount key min max 예) zlexcount usersorted - +, member 이름으로 범위를 지정하여 개수를 리턴

이 명령은 score가 모두 같아야 원하는 결과를 얻을 수 있습니다.

ZREVRANGEBYLEX : ZREVRANGEBYLEX key max min [limit offset count] , ZRANGEBYLEX 와 반대 기준으로 기능이 제공 됩니다.

ZRANK : zrank key member 예) zrank usersorted "홍길동1" ,

member의 index(rank)를 리턴 합니다.(0 base), score 기준으로 작은 값 순서로 조회 됩니다.

ZREVRANK : zrevrank key member 예) zrevrank usersorted  "홍길동1"

member의 index(rank)를 리턴 합니다.(0base), score 기준으로 큰 값 순서로 조회 됩니다.

ZSCORE : zscore key member 예) zscore usersorted  "홍길동1" , member score 조회

 

증가/감소 :ZINCRBY

ZINCRBY : zincrby key increment member 예) zincrby usersorted -10 "홍길동1",  value의 score를 증감

key 가 없다면 생성 후 저장 됩니다. value가 없다면 생성되며 이때 base score는 0점을 기준으로 가감 됩니다.

increment는 실수, 정수 처리가 가능하며, 음수 양수 모두 사용이 가능 합니다.

 

집합연산 :ZUNIONSTORE, ZINTERSTORE

ZUNIONSTORE :  zunionstore dest_key numKeys src_key1 src_key2 예) zunionstore unionsorted 2 usersorted1 usersorted2

src keys의 합집합을 dest_key에 생성 입력합니다. src_keys에 중복되는 member의 score는 더해 집니다.

zunionstore dest_key numKeys src_key1 src_key2 weights weight1 weight2

예) zunionstore unionsorted 2 usersorted1 usersorted2 weights 1.3 1.5, 각 srcKeys에 가중치만큼 곱해져서 더해 집니다.

zunionstore dest_key numKeys src_key1 src_key2 aggregate sum|min|max

예)  zunionstore unionsorted 2 usersorted1 usersorted2 aggregate min

aggregate가 없으면 default는 sum, min은 각 score의 적은값을, max는 각 score의 큰값을 취해서 반영 됩니다.

ZINTERSTORE :   zinterstore dest_key numKeys src_key1 src_key2 예)

src keys의 교집합을 dest_key에 생성 입력 합니다. member의 score는 더해 집니다.

zinterstore dest_key numKeys src_key1 src_key2 weight1 weight2 , 가중치에 대한 처리 입니다.

zinterstore dest_key numKeys src_key1 src_key2 aggregate sum|min|max ,

aggregate가 없으면 default는 sum, min은 각 score의 적은값을, max는 각 score의 큰값을 취해서 반영 됩니다.

'NoSQL > redis' 카테고리의 다른 글

Redis 의 Lua Script 활용  (0) 2021.04.11
Redis cluster  (0) 2021.04.11
redis Strings  (0) 2021.04.11
redis Lists  (0) 2021.04.11
redis Sets  (0) 2021.04.11
redis Hashes  (0) 2021.04.11
[Redis, 레디스] 레디스 소개 및 아키텍처, 주의할 점(Redis Overview, Redis Architecture, Tool Tip)  (0) 2021.03.29
redis desktop manager for windows  (1) 2020.08.14