본문 바로가기

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

21.Redis, 레디스 인코딩 중 셋 데이터 인코딩 에 대해서 알아볼께요.^^

반응형

셋데이터 인코딩에 대해서 생각정리를 해볼께요..^^

  • Set 데이터의 시간 복잡도
    • O(1)
      • 해당 시간 복잡도를 제공하기위해서 내부적으로 Hash 테이블 구조로 구현되어 있다고 함.
  • Set 데이터의 인코딩
    • OBJ_ENCODING_HT
      • 기본 인코딩.
    • OBJ_ENCODING_INTSET
      • 메모리를 절약하기 위한 특별한 인코딩.
      • 환경설정(redis.conf)
        • set-max-intset-entries 설정에서 지정됨.
      • 숫자 데이터로 한정됨.
  • 초기 설정 인코딩인 OBJ_ENCODING_INTSET이 OBJ_ENCODING_HT 으로 변경되면 다시 OBJ_ENCODING_INTSET으로 변경되지 않음.
    • 즉, 숫자 데이터가 아니면 항상 OBJ_ENCODING_HT 인코딩으로 변환됨.

Set 데이터의 인코딩 변화 확인 예시


  •  
    • 위의 테스트 예제 결과와 같이,
      • 초기 설정 인코딩인 OBJ_ENCODING_INTSET이 OBJ_ENCODING_HT 으로 변경되면 다시 OBJ_ENCODING_INTSET으로 변경되지 않음을 확인할 수 있음.

Set 데이터의 인코딩을 처리하는 Redis 함수

  • t_set.c 파일에 정의된 saddCommand 함수에서 처리됨.
    • 소스

​​​​​​​Set 에 데이터를 추가 하는 함수

  • 소스

  • 위의 소스를 보면,
    • OBJ_ENCODING_INTSET이 OBJ_ENCODING_HT 으로 변경되는 조건 및 로직을 볼 수 있음.

결론

  • Set 데이터 인코딩은 아래 2가지 인코딩으로 구성되어 있음.
    • OBJ_ENCODING_HT
    • OBJ_ENCODING_INTSET
  • 숫자 데이터가 아니면 항상 OBJ_ENCODING_HT 인코딩으로 변환됨.
  • Set 데이터 인코딩이 OBJ_ENCODING_INTSET에서 OBJ_ENCODING_HT로 변경되면, 다시는 OBJ_ENCODING_INTSET 으로 변경되지 않음.
  • 오늘도 Redis 에 대한 마술(?) 한가지 획득 완료! ^^;

  • 오늘의 명언 한마디
    • 고수는 정부 정책의 전환으로 인한 시장의 변화 가능성을 항상 염두에 두며, 한 번에 많은 돈을 별러고 욕심내기보다는 리스크를 관리하면서 꾸준히 투자하는 것이 더 큰 수익이 된다는 사실을 경험으로 알게 된 사람들이다. -신형강(부룡), "부동산 투자 이렇게 쉬었어?" 중에서...

  • 오늘의 영어 한마디
    • 질문) Even you should be able to handle this.
      • 이건, 너라도 할 수 있을 거야.
    • 대답) Hey, what do you mean by that?
      • 뭐야, 그거 무슨 뜻으로 하는 소리야!
    • 해설
      • "What do you mean by that?" 은 그거 대체 무슨 뜻이야? 라는 힐문조의 표현
      • 비슷한 표현인 "도대체 날 뭐로보고 그런 소릴하는 거야?"
        • Watch who you say that to!
          • 이때, watch 는 "주의해라" 라는 의미임.
728x90
300x250