DB

Redis란?_Sorted sets

Raconer 2023. 4. 16. 23:41
728x90

Sorted Sets란?

Sorted Sets는 Sets와 Hash의 혼합과 유사한 데이터 유형입니다.
집합과 마찬가지로 정렬된 집합은 고유하고 반복되지 않는 문자열 요소로 구성되므로 어떤 의미에서 정렬된 집합도 집합입니다.
그러나 집합 내부의 요소는 순서가 지정되지 않지만 정렬된 집합의 모든 요소는 score라고 하는 부동 소수점 값과 연결됩니다(모든 요소가 값에 매핑되기 때문에 유형도 해시와 유사한 이유입니다).
또한 정렬된 집합의 요소는 순서대로 가져옵니다(따라서 요청 시 정렬되지 않으며 순서는 정렬된 집합을 나타내는 데 사용되는 데이터 구조의 특성입니다).
다음 규칙에 따라 주문됩니다.

해커 목록(출생년도/이름)

  > zadd hackers 1940 "Alan Kay"
  (integer) 1
  > zadd hackers 1957 "Sophie Wilson"
  (integer) 1
  > zadd hackers 1953 "Richard Stallman"
  (integer) 1
  > zadd hackers 1949 "Anita Borg"
  (integer) 1
  > zadd hackers 1965 "Yukihiro Matsumoto"
  (integer) 1
  > zadd hackers 1914 "Hedy Lamarr"
  (integer) 1
  > zadd hackers 1916 "Claude Shannon"
  (integer) 1
  > zadd hackers 1969 "Linus Torvalds"
  (integer) 1
  > zadd hackers 1912 "Alan Turing"
  (integer) 1

보시다시피 ZADD는 SADD와 유사하지만 score인 하나의 추가 인수(추가할 요소 앞에 위치)를 취합니다.
ZADD도 가변적이므로 위의 예에서 사용하지 않더라도 여러 score-value 쌍을 자유롭게 지정할 수 있습니다.
Sorted Sets를 사용하면 출생 연도별로 정렬된 해커 목록을 반환하는 것이 쉽지 않습니다.
왜냐하면 실제로 그들은 이미 정렬되어 있기 때문입니다.

구현 참고 사항

정렬된 집합은 건너뛰기 목록과 해시 테이블을 모두 포함하는 이중 포트 데이터 구조를 통해 구현되므로 요소를 추가할 때마다 Redis는 O(log(N)) 작업을 수행합니다.
하지만 정렬된 요소를 요청할 때 Redis는 전혀 작업을 수행할 필요가 없으며 이미 모두 정렬되어 있습니다.

출력

  > zrange hackers 0 -1
  1) "Alan Turing"
  2) "Hedy Lamarr"
  3) "Claude Shannon"
  4) "Alan Kay"
  5) "Anita Borg"
  6) "Richard Stallman"
  7) "Sophie Wilson"
  8) "Yukihiro Matsumoto"
  9) "Linus Torvalds"

반대로 출력시

  > zrevrange hackers 0 -1
  1) "Linus Torvalds"
  2) "Yukihiro Matsumoto"
  3) "Sophie Wilson"
  4) "Richard Stallman"
  5) "Anita Borg"
  6) "Alan Kay"
  7) "Claude Shannon"
  8) "Hedy Lamarr"
  9) "Alan Turing"

score와 함께 반환

  > zrange hackers 0 -1 withscores
  1) "Alan Turing"
  2) "1912"
  3) "Hedy Lamarr"
  4) "1914"
  5) "Claude Shannon"
  6) "1916"
  7) "Alan Kay"
  8) "1940"
  9) "Anita Borg"
  10) "1949"
  11) "Richard Stallman"
  12) "1953"
  13) "Sophie Wilson"
  14) "1957"
  15) "Yukihiro Matsumoto"
  16) "1965"
  17) "Linus Torvalds"
  18) "1969"
728x90

'DB' 카테고리의 다른 글

MySql DB 엔진  (0) 2023.07.03
DB 격리 수준(ACID > Isolation)  (0) 2023.06.15
Redis란?_Sets  (0) 2023.04.16
Redis 란?_Hash  (0) 2023.04.16
Redis 란?_ Automatic creation and removal of keys  (0) 2023.04.16