• 티스토리 홈
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 2
        2023년 06월 02일
        • starryeye
        • 작성자
        • 2023.06.02.:04

        Redis 가 지원하는 Data Type 에 대해서 계속 알아보자..

         

        3. Sets

        Lists 와 동일하게 Key 하나에 Value 가 여러개의 집합으로 이루어져 있다.

        Value 만을 본다면, C++ 에서 unordered_set 과 비슷한 역할이다.

         

        특징

        1. 순서가 없고 유니크한 값의 집합

         

        2. 개별 접근을 위한 인덱스가 존재하지 않지만, 개별 값의 존재 여부는 빠르게 체크 할 수 있다.

         

        3. 집합 연산이 존재한다. (합집합, 교집합 등)

         

        4. 활용

        알고리즘 Union, Hash Table, Hash Set 등에 해당되는 모든 상황에서 활용가능하다.

        > 특정 시간동안 유저 한명 당 한번의 유효한 쿠폰을 발급하는 요구사항이 있을 때,

        개발자는 Redis 의 Sets 를 사용할 수 있다.

        특정 시간동안 어떤 유저가 쿠폰을 발급 받았는지 여부를 빠르게 확인할 필요가 있는데

        이 때, 해당 유저의 Id 를 Sets 의 Value 로 적재하면 빠른 체크가 가능하다.

         

        5. 대표적 명령어

        Key - Value 로 이루어져 있어서 map 과 같이 느껴지는데 Key 는 변수명으로 생각하면 편하다..

        명령어 기능
        SADD [Key] [Value] Key 값에 해당하는 Set 에 Value 를 추가한다.
        (Key 없으면 생성, Value 가 이미 존재하면 Set 변함 없음)
        O(1)
        SREM [Key] [Value] Key 값에 해당하는 Set 에 Value 를 삭제한다.
        SMEMBERS [Key] Key 값에 해당하는 Set 에 저장된 모든 Value 를 조회한다.
        O(N)
        SCARD [Key] Key 값에 해당하는 Set 에 저장된 모든 Value 의 갯수를 조회한다.
        O(1)
        SRANDMEMBER [Key] [Count] Key 값에 해당하는 Set 에 저장된 Value 중
        무작위로 Count 개 만큼 반환받는다.
        SISMEMBER [Key] [Value] Key 값에 해당하는 Set 에 Value 라는 값이 존재하는지 확인한다.
        해당 Sets 에 Value 총 갯수와 무관하게 빠른 속도 보장
        O(1)

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

         

         

        6. 예시

        > user:123:favorites 라는 Key 에 해당하는 Set 에 347, 561, 742, 561 의 Value 를 추가하고 있다.

         

        > user:123:favorites 라는 Key 에 해당하는 Set 에 742 라는 Value 는 존재하고, 299 라는 Value 는 존재하지 않는다.

         

        > user:123:favorites 라는 Key 에 해당하는 Set 과 user:456:favorites 라는 Key 에 해당하는 Set 의 교집합을 구한다.

         

        > user:123:favorites 라는 Key 에 해당하는 Set 에 저장된 모든 Value 의 갯수를 반환 받았다.

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

         

         

         

        4. Hashes

        Key 하나에 Value 로 여러개의 field(key)-value 쌍을 가지고 있는 형태이다.

        -> 여러 필드를 가진 객체를 저장하는 것으로 생각

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

         

        특징

        1. Value 로 Json, 객체, 관계형 DB 의 Table 등을 넣기 편하다.

         

        2. Redis Strings 에서 Value 로 Json 을 넣은 상황과 동일하지만,

        Redis Hashes 는 특정 필드 값을 지정해서 접근할 수 있다는 차이점이 있다.

         

        3. Value 에 해당하는 field(key)-value 쌍을 약 40 억개 까지 저장이 가능하다.

         

        4. 활용

        C++ 의 unordered_map 을 사용하는 알고리즘에 응용 가능하다.

        user1 에 방문 수, 클릭 수, 좋아요 수 등의 필드를 지정해놓고,

        HINCRBY 명령어를 활용하여 각 value 를 counter 로 사용할 수 있다.

         

        5. 대표적 명령어

        명령어 기능
        HSET [Key] [field] [value] Key 값에 해당하는 Hashes 에 field-value 쌍을 Value로 저장한다.
        O(1)
        HGET [Key] [field] Key 값에 해당하는 Hashes 에서 field 값에 해당하는 value 를 조회한다.
        O(1)
        HLEN [Key] Key 값에 해당하는 Hashes 에 속한 모든 field 갯수를 반환 받는다.
        O(1)
        HMSET [Key] [field] [value] [field] [value] ...
        HMGET [Key] [field] [field] ...
        Key 값에 해당하는 Hashes 에 field-value 쌍들을 저장한다.
        Key 값에 해당하는 Hahses 에서 field 값들에 해당하는 value 들을 조회 한다.
        HKEYS [Key] Key 값에 해당하는 Hashes 에 속한 모든 field 의 name 을 반환 받는다.
        HINCRBY [Key] [field] [Increment]  Key 값에 해당하는 Hashes 에서 field 값에 해당하는 value 를 Increment 만큼 증가 시킨다. (필드 값은 Integer)
        HDEL [Key] [field] [field] ... Key 값에 해당하는 Hashes 에서 field 를 삭제한다.

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

         

        6. 예시

        > user:123 이라는 Key 에 해당하는 Hashes 에...

        field: username, value: martina

        field: firstname, value: Martina

        field: lastname, value: Elisa

        field: country, value: GB

        를 저장한다.

        > user:123 이라는 Key 에 해당하는 Hashes 에 username 이라는 field 의 value 를 반환받는다.

        > user:123 이라는 Key 에 해당하는 Hashes 의 모든 field-value 쌍을 반환받는다.

         

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 1 증가 시킨다.

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 1 증가 시킨다.

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 errors 라는 field 의 value 를 1 증가 시킨다.

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 requests 라는 field 의 value 를 1 증가 시킨다.

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 반환 받는다.

        > device:777:stats 이라는 Key 에 해당하는 Hashes 에 request, errors 라는 field 들의 value 를 반환 받는다.

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

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

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

        티스토리툴바