• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Redis Data Type 3
        2023년 06월 02일
        • starryeye
        • 작성자
        • 2023.06.02.오후09:47
        반응형

        Redis 가 제공하는 Data Type 종류에 대해 계속 알아보겠다.

         

        5. Sorted Set (ZSets)

        하나의 Key 에 Value 로는 정렬된 데이터 집합으로 이루어진 형태이다.

        -> Key 는 변수이고, Value 는 C++ 의 set 이라 생각하면 편하다.

        -> 그런데 차이점은, Value 에 각 데이터들은 score 라는 값(숫자)이 존재하고 이를 바탕으로 정렬한다.

        (각 데이터는 member 로 불린다.)

         

        특징

        1. Redis 의 Sets 와 유사하게 유니크한 값의 집합이다.

         

        2. 정렬된 상태를 유지한다.

        -> 최소/최대 값을 빠르게 조회할 수 있다.

         

        3. 활용

        랭킹(리더 보드) 기능에 활용 가능하다.

         

        4. 대표적 명령어

        명령어 기능
        ZADD [Key] [Score] [Member] [Score] [Member] ... Key 값을 가진 ZSets 에 Score-Member 쌍의 Value 들을 저장한다.
        ZRANGE [Key] [StartIndx] [EndIndx] Key 값을 가진 ZSets 가 오름차순으로 정렬되었을 때,
        StartIndx 부터 EndIndx 까지의 범위의 값(Member)을 반환한다.
        O(log(N) + M) N: 전체 Member 수,  M: 리턴하는 Member 수
        ZRANK [Key] [Member] Key 값을 가진 ZSets 의 Member 에 해당하는 순위를 반환한다.
        (오름차순 기준)
        O(log(N) + N)
        ZREVRANK [Key] [Member] Key 값을 가진 ZSets 의 Member 에 해당하는 순위를 반환한다.
        (내림차순 기준)
        O(log(N) + N)
        ZREM [Key] [Member] [Member] ... Key 값을 가진 ZSets 의 Member 들을 삭제한다.
        ZLEN [Key] Key 값을 가진 ZSets 에 속한 Member 의 총 갯수를 반환한다.

        http://redisgate.kr/redis/command/zsets.php

         

        5. 예시

        > leaderboard:455 라는 Key 를 가진 ZSets 에 Score - Member 쌍으로 저장했다.

        마지막 라인은 덮어쓰기 되었다.

         

        > leaderboard:455 라는 Key 를 가진 ZSets 의 0순위 부터 2순위 까지의 Member 를 구한다.

        (REV 명령어로, 내림차순 적용)

         

        > leaderboard:455 라는 Key 를 가진 ZSets 의 user:2 라는 Member 의 순위를 구한다.

        (내림차순)

        https://redis.io/docs/data-types/sorted-sets/

         

         

        6. Sorted Set 의 데이터 구조

        http://redisgate.kr/redis/configuration/internal_skiplist.php

        zip list, skip list

         

         

        6. Bitmaps

        Key 하나에 Value 는 0 과 1 로 이루어진 벡터, Bitmap 형태이다.

         

        특징

        1. 비트 벡터이므로 비트 연산이 가능하다.

         

        2. 하나의 비트맵이 가지는 공간은 4 byte 로 2^32 - 1 이다.

         

        3. 활용

        비트 벡터의 각 인덱스를 유저 Id 로 매핑 시키고,

        방문 여부를 의미하도록 정하면 BITCOUNT 연산은 전체 방문 수를 의미하게 된다.

         

        비트맵의 비트 연산 기본 활용인 Bit masking 으로 사용할 수 있다.

         

        4. 대표적 명령어

        명령어 기능
        SETBIT [Key] [Offset] [Value] Key 값에 해당하는 비트맵의 특정 Offset 의 값을 Value(0 or 1)로 변경한다.
        GETBIT [Key] [Offset] Key 값에 해당하는 비트맵의 특정 Offset 의 값을 반환 받는다.
        BITCOUNT [Key] Key 값에 해당하는 비트맵에서 비트가 1인 인덱스의 수를 센다.
        O(N)
        BITOP [Operation] [Dest Key] [Key1] [Key2] Key1, Key2 에 해당하는 비트맵을 Operation 에 해당하는 비트 연산을 수행하여 결과를 Dest Key 의 비트맵에 할당한다.
        AND, XOR, OR, NOT

        http://redisgate.kr/redis/command/bits.php

         

         

        5. 예시

        > pings:2024-01-01-00:00 이라는 Key 에 해당하는 Bitmaps 의 123 Offset 에 1을 할당

         

        > pings:2024-01-01-00:00 이라는 Key 에 해당하는 Bitmaps 의 123 Offset 의 값을 구하였다.

        https://redis.io/docs/data-types/bitmaps/

         

         

        7. HyperLogLog

        하나의 Key 에 Value 는 데이터의 집합이다.

        -> Redis Sets 와 비슷하다.

         

        특징

        1. 데이터 집합 내의 유니크 값 개수를 구하는데 사용된다.

         

        2. 확률적 자료구조로 개수를 구하는데 오차(0.81%)가 있으며, 매우 큰 데이터를 다룰 때 사용된다.

         

        3. 속도

        1백만개의 데이터를 insert

        -> SADD 보다 PFADD 가 1.6 배 빠르게 측정됨

         

        조회는 PFCOUNT 와 SCARD 모두 O(1) 이다.

         

        4. 공간

        Set에 1백만개의 숫자를 저장하면 4,848kb, 

        1천만개의 숫자를 저장하면 46,387kb를 사용하지만, 

        HyperLogLog를 사용하면 원소 개수와 상관없이 고정으로 12kb만 사용한다.

         

        4. 활용

        데이터 정확도를 높게 보장하지 않아도 된다면,

        회원 Id 를 HyperLogLog 에 빠르게 적재하고 방문자 수를 빠르게 조회 할 수 있다.

         

        5. 대표적 명령어

        명령어 기능
        PFADD [Key] [Element] [Element] ... Key 값에 해당하는 HyperLogLog 에 값들을 저장한다.
        O(1)
        PFCOUNT [Key] Key 값에 해당하는 HyperLogLog 의 전체 요소의 갯수를 구한다.
        O(1)
        PFMERGE [Dest Key] [Key1] [Key2] Key1, Key2 의 HyperLogLog 에 속한 모든 요소를 병합 하여 Dest Key 에 해당하는 HyperLogLog 에 할당한다.
        O(N)

        http://redisgate.kr/redis/command/hyperloglog.php

         

         

        6. 예시

        > members 라는 Key 에 해당하는 HyperLogLog 에 123, 500, 12 의 값들을 저장하였다.

         

        > members 라는 Key 에 해당하는 HyperLogLog 의 총 Value 갯수를 구하였다.

        https://redis.io/docs/data-types/hyperloglogs/

        반응형

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

        Redis Core, I/O, Transaction, Lock  (0) 2023.06.03
        Redis Data Type 2  (1) 2023.06.02
        Redis Data Type 1  (0) 2023.06.02
        Redis 시작해보기  (0) 2023.06.01
        MongoDB Sharded Cluster  (0) 2023.06.01
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • 5. Sorted Set (ZSets)
      • 6. Bitmaps
      • 7. HyperLogLog
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      개인정보

      • 티스토리 홈
      • 포럼
      • 로그인

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.