본문 바로가기

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

10.Redis, 해시 데이터에 대해서 알아보자.

반응형

해시데이터에 대해서..

  • 해시 데이터는 문자열 필드와 값으로 이루어진 Map 구조로 되어 있음.
  • 해시 데이터에는 2의 32승-1 개의 필드와 값을 저장할 수 있음.
    • 숫자로 바꾸어보면...대략 42억개가 넘게됨...^^;
  • 해시 명령의 시간 복잡도는 O(1) 
    • 단, hgetall/hkeys/hvals Redis 명령은 제외.
  • 해시 데이터의 저장 구조
      • Key 하나에 여러 개의 Field-Value 쌍으로 이루어짐.
        • 즉, 일반적으로 프로그램 언어의 Map 자료구조와 동일함.

해시 데이터의 명령어

  • 그룹데이터 저장
    • 해시 데이터를 생성 및 삭제하는 명령은 아래와 같음.
      • hmset
        • 명령) hmset [key] [field1] [value1] [field2] [value2] ....
        • 응답) <상태응답>, 항상 OK
      • hmget
        • 명령) hmget [key] [field1] [field2] ....
        • 응답) <멀티벌크응답>, 주어진 필드의 값
      • hlen
        • 명령) hlen [key]
        • 응답) <숫자응답>, 주어진 해시에 저장된 필드 개수
      • hdel
        • 명령) hdel [key]
        • 응답) <숫자응답>, 삭제된 필드의 수 
      • 예시
          • hmset 은 주어진 key 에 대해서 다중 field 값을 저장하는 용도임.
          • hmget 을 사용해서 저장된 사용자의 정보를 조회할 수 있음.
          • hlen 은 현재 저장된 사용자의 field 수를 조회함
          • hdel를 사용해서 현재 저장된 field 를 삭제할 수 있음.
  • 숫자의 증감
    • 해시에 저장된 데이터의 field 값이 숫자일 경우, hincrby, hincrbyfloat 명령으로 증감 처리를 할 수 있음.
    • 문자열 데이터에서 지원하는 숫자 증감 명령와는 다르게 해시 데이터에서는 증가 명령만 지원하며, 숫자의 감소를 처리하려면, 명령의 인자값에 음수를 주면됨.
      • hincrby
        • 명령) hincrby [key] [field] [value]
        • 응답) <숫자응답>, 명령이 수행되고 난 후의 필드 값.
      • hincrbyfloat  
        • 명령) hincrbyfloat [key] [field] [value]
        • 응답) <숫자응답>, 명령이 수행되고 난 후의 필드 값.
      • 예시
  • 해시 데이터의 Key 목록 조회
    • 해시 데이터에 저장된 모든 Key의 목록과 모든 값의 목록을 조회 할때는 아래 명령을 사용함
      • hgetall
        • 기존 연재된 "02.Redis, 레디스의 기본명령어에 대해서 알아볼까요?"를 참고 부탁드려요^^;
    • key 의 목록이나 값의 목록만을 조회 할때는 아래 명령을 사용함.
      • hkeys
        • 명령) hkeys [key]
        • 응답) <멀티벌크응답>, 주어진 키에 저장된 모든 필드 목록
      • hvals
        • 명령) hvals [key]
        • 응답) <멀티벌크응답>, 주어진 키에 저장된 모든 값 목록
    • 예시
  • 해시데이터 관련 참고페이지

결론

  • Redis 에는 프로그램언어에서 사용하는 Map 과 같은 해시 데이터 타입을 가지고 있음.
  • 주의해야할 사항은 만약 수천 개의 필드가 저장된 해시 데이터에서 hkeys, hvals와 같은 명령을 실행하면 다른 클라이언트의 응답 속도에 영향을 미치게 되어 사용에 유의해야함.
    • 왜냐하면, 해당 명령어의 시간복잡도 가 O(N) 이기 때문에..
      • 첨언하자면, O(N)은 저장된 필드 수가 많으면 많을 수록 응답 속도가 더욱 느려짐. 저장된 필드의 개수와 응답속도의 관계는 비례하기 때문에...

  • 오늘의 명언 한마디
    • 우리의 사고 방식이 우리를 부자로 만든다. 그리고, 투자도 각자에게 맞는 투자가 있다. -로버트 기요사키, 『부자아빠, 가난한아빠3』 중에서...

  • 오늘의 영어 한마디
    • 질문) I'm really upset about this.
      • 으, 정말 열 받아!
    • 응답) What happened?
      • 왜그래?
    • 해설)
      • be upset 은 "흥분(분계)하다" 로 정말 열 받는다 라는 의미.
      • upset 대신에, mad 또는 angry 를 쓸수있음.
728x90
300x250