본문 바로가기

좋아하는 것_매직IT/9.redis

12.Redis, 정렬된 셋 데이터에 대해서 알아보자.

반응형

정렬된 셋에 대해서...

  • 정렬된 셋 데이터의 특징은 아래와 같다.
    • 셋 데이터와 유사한 구조를 가지고 있기 때문에 셋 데이터와 동일한 특징을 가짐.
    • 요소 정렬이라는 부가적인 특징을 가짐.
    • 정렬된 셋 명령의 접두사는 "Z" 
      • "Z" 로 시작하는 명령은 예외없이 모두 정렬된 셋 데이터의 명령임.
    • 정렬된 셋 데이터는 셋 데이터 구조에 요소의 가중치(score) 값이 추가되어 있음.
      • 가중치에 따라 각 요소의 정렬이 수행됨.
      • 저장된 요소에 점수를 지정하거나 더하여 요소의 순서를 변경할 수 도 있음.
      • 가중치에 입력가능한 값
        • 정수 or 배정밀도 부동소수점
        • 기본정렬순서 : 오름차순
          • 즉, 가중치가 작은 데이터부터 큰 데이터의 순서로 정렬되어 조회됨.
          • 단, 아래 명령을 통해서 내림차순으로 정렬된 결과를 조회할 수 있음.
            • zrevrange
          • 가중치를 보려면 정렬된 셋 명령어에 아래 키워드를 같이 사용함.
            • withscores
    • 셋 데이터와 동일하게 2의 32승 - 1개의 요소를 저정할 수 있음.
      • 숫자로 바꾸어보면...대략 42억개가 넘게됨...^^;
    • 정렬된 셋 데이터 저장구조
  • 가장 많이 사용되는 곳
    • 실시간 순위를 계산하는 데 사용할  수 있음.

정렬된 셋의 주요 명령어

  • 내림차순으로 조회 명령
    • zrevrange 
      • 명령) zrevrange [key] [start index] [end index] [withscores]
      • 응답) <숫자응답>, 조회된 요소 목록
    • 예시
  • 가중치 변경 명령
    • zincrby
      • 주어진 Key에 저장된 셋 데이터 중 지정된 요소의 가중치를 입력된 값만큼 증가시킴
      • incr 명령과 동일하게 음수를 입력하여 값을 감소시킬 수 있음.
      • 명령) zincrby [key] [increment member]
      • 응답) <숫자응답>, 명령이 수행된 이후의 가중치 값
    • zrank
      • 주어진 Key에 저장된 셋 데이터 중 지정된 요소의 순위를 조회함.
        • 조회되는 순위는 0부터 시작, 정렬은 가중치 오름차순.
      • 명령) zrank [key] [member]
      • 응답) <숫자응답>, 값이 존재하면 가중치 오름차순으로 정렬된 순위, 없으면 nil
    • zrevrank
      • 주어진 Key에 저장된 셋 데이터 중 지정된 요소의 순위를 조회함.
        • 조회되는 순위는 0부터 시작, 정렬은 가중치 내림차순.
      • 명령) zrevrank [key] [member]
      • 응답) <숫자응답>, 갑이 존재하면 가중치 내림차순으로 정렬된 순위, 없으면 nil
    • zrange
      • 정렬된 셋의 범위 데이터를 오름하순으로 조회
      • 명령) zrange [key] [start index] [end index] [withscores]
      • 응답) <숫자응답>, 조회된 요소 목록
    • 예시
    • 그외의 아래 명령들은 Redis 홈페이지를 참고부탁드려요.. ^^;
      • https://redis.io/commands#sorted_set
        • zrangebyscore
          • 정렬된 셋의 점수 범위에 해당하는 데이터 조회
        • zremrangebyrank
          • 정렬된 셋에서 순위에 해당하는 범위의 데이터 제거
        • zremrangebyscore
          • 정렬된 셋에서 가중치에 해당하는 범위의 데이터 제거
        • 기타등등
  • 순위 처리와 조회 명령
    • zscore
      • 주어진 Key에 저장된 셋 데이터 중 지정된 요소의 가중치를 조회함.
      • 명령) zscore [key] [member]
      • 응답) <숫자응답>, 주어진 요소가 존재하면 가중치, 없으면 nil
    • zrevrangebyscore
      • 정렬된 셋에 저장된 데이터의 가중치 범위에 해당하는 요소의 목록을 조회함.
      • 아래 키워드를 추가하면 가중치를 함께 조회가능함.
        • withscores 
      • 조회되는 목록 수를 조절하려면 아래 명령을 사용.
        • limit
      • 명령) zrevrangebyscore [key] [max] [min] [withscores] [limit 'offset' 'count']
      • 응답) <숫자응답>, 조회된 값 목록, 결과가 없을 때 nil
    • 예시
  • 정렬된 셋 명령의 특별한 표현식
    • 정렬된 셋 데이터의 명령 중에서 가중치를 인자로 사용하는 명령은 특별한 표현식을 포함하여 사용할 수 있음.
      • 무한대 표현식(inf : infinity 의 약자)
        • +inf 
          • 양의 무한대(최대값)
        • -inf
          • 음의 무한대(최소값)
      • 초과/미만 표현식
        • 초과, 미만 표현식
          • 가중치 값의 앞에 왼쪽괄호 기호를 추가하여 표현함
            • ex) (5, (7 과 같이...
        • 기본적으로 레디스는 명령의 인자에 입력되는 값을 포함하는 결과를 조회함.
          • ex) zrange [key] 0, 1  
            • 0과 1을 포함한 결과를 제공함, 그래서 2개의 요소가 조회됨.
            • 조회 결과가 최대값 or 최소값을 포함하지 않아야할 때가 발생할 수 도 있음.
              • 이때, 초과, 미만 표현식을 사용함.
                • 가중치가 정수인때는 별로 유용하지 않을 수도 있음.
                • but, 가중치가 배정밀도 부동소수점이면 다른 이야기가 됨.
                  • ex) 5.999999 와 같은 값을 때 해당.
    • 예시

결론

  • Redis 의 데이터 형 중에는 셋과 유사하지만, 스코어 즉, 가중치를 관리하고 있는 정렬된 셋도 존재함.
  • 정렬된 셋을 통해서 주로 구현하는 기능은 실시간 랭킹을 계산하는 데 주로 사용함.
  • 정렬된 셋 명령에는 특별한 표현식이 존재함.
    • 무한대 표현식
      • +inf , -inf
    • 초과/미만 표현식
      •  왼쪽괄호기호( "(" )

  • 오늘의 명언 한마디
    • 모든것은 두뇌를 훈련시켜 무엇을 찾을것인지 아는 힘과 좋은 투자 기회가 나타날때를 대비하는 힘을 기르는 것 부터 시작된다. -로버트 기요사키, 『부자아빠, 가난한아빠3』 중에서...

  • 오늘의 영어 한마디
    • 질문) Hey, that isn't cheep, you know!
      • 정말 해도 너무한 거 아냐?
    • 응답) I'm sorry. I didn't mean to do that.
      • 미안해, 일부러 그런 게 아니야.
    • 해설)
      • "that isn't cheep" 는 소중한 것이나 값비싼 물건을 엉망으로 해놨을때, "싼것인줄알아!" 라고 쏘아 붙이는 표현.
      • "you know"는 "알긴알아!", "알겠지" 라는 의미가 내포됨.
      • 추가적으로 "How can you treat it that way? 는 "잘도 그런 짓을 했겠다."의 의미.
728x90
300x250