본문 바로가기

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

11.Redis, 셋 데이터에 대해서 알아보자.

반응형

셋 데이터에 대해서..

  • 셋데이터는 중복을 허용하지 않는 집합 형태의 자료구조.
  • 유의사항으로, 셋 데이터의 정렬은 되어 있지 않음.
  • 셋데이터에는 2의 32승-1개의 값을 저장할 수 있음.
    • 숫자로 바꾸어보면...대략 42억개가 넘게됨...^^;
  • 값이 저장될 때 중복에 대한 확인이 일어남.
  • 셋 데이터의 내부 구현은 해시 구조이기 때문에 저장된 요소의 개수에 상관없이 동일한 시간 복잡도를 가짐.
  • 셋 데이터 구조
      • 하나의 Key 에 여러개의 요소가 저장되며, 집합연산이 가능한 구조.
        • 집합연산
          • 합집합
            • sunion 명령
          • 교집합
            • sinter 명령
          • 차집합
            • sdiff 명령

셋의 주요 명령어

  • 셋의 집합 연산
    • sunion
      • 주어진 키에 저장된 요소들의 합집합을 돌려줌.
        • 명령) sunion [key1] [key2]
        • 응답) <멀티벌크응답>, 합집합에 해당하는 값 목록
    • sinter
      • 주어진 키에 저장된 요소들의 교집합을 돌려줌.
        • 명령) sinter [key1] [key2]
        • 응답) <멀티벌크응답>, 교집합에 해당하는 값 목록
    • sdiff
      • 주어진 키에 저장된 요소들의 차집합을 돌려줌.
        • 명령) sdiff [key1] [key2]
        • 응답) <멀티벌크응답>, 차집합에 해당하는 값 목록
    • 예시
        • 위의 예시를 통해서, 합집합, 교집합, 차집합에 대해서 연산이 가능함을 알 수 있음.
        • 시스템에 따라 차이는 있지만, 평균적으로 수백개 정도의 요소를 가진 셋 데이터에 대한 집합연산은 시스템에 큰 부하를 주지 않음.
        • 단, 셋 데이터의 집합 연산은 명령 수행 비용이 매우 비싼 편에 속함.
          • 즉, 셋 데이터의 집합연산이 많아지면 자연스레 레디스의 전체적인 성능도 저하됨.
            • 그래서, 집합연산은 반드시 필요한 상황에서만 사용하도록 하자구요.^^;
  • 셋의 집합 요소 조회
    • Redis 의 셋 데이터는 매우 다양한 데이터 조회 명령을 제공함.
      • scard
        • 주어진 Key에 저장된 요소들의 개수를 돌려줌.
          • 만약, 주어진 Key가 존재하지 않으면 0을 돌려줌.
        • 명령) scard [key]
        • 응답) <숫자응답>, 저장된 요소의 개수
      • srem
        • 주어진 Key에 저장된 요소를 제거하고 제거된 요소의 개수를 돌려줌.
          • 만약, 주어진 Key or 해당 요소가 존재하지 않으면 0을 돌려줌.
        • 명령) srem [key] [value1] [value2] ...
        • 응답) <숫자응답>, 제거된 값의 수
      • spop
        • 주어진 Key에 저장된 요소 중에서 임의의 요소를 제거하고 제거된 요소를 돌려줌.
          • 만약, 주어진 Key가 존재하지 않으면 nil 을 돌려줌.
        • 명령) spop [key]
        • 응답) <벌크응답>, 제거된 값
      • sismember
        • 입력된 요소가 주어진 Key에 저장되어 있는지 검사함.
          • 만약 주어진 Key가 존재하지 않으면 0을 돌려줌.
        • 명령) sismember [key] [value]
        • 응답) <숫자응답>, 존재하면 1, 존재하지 않으면 0
      • smove
        • 원본Key에 저장된 요소를 대상Key로 이동하고 이동결과를 돌려줌.
          • 만약, 원본 Key가 존재하지 않으면 결과로 0을 돌려줌.
          • 만약, 대상 Key가 존재하지 않으면, 새로운 셋 데이터를 생성하고 요소를 이동시킴.
        • 명령) smove [원본key] [대상key] [value]
        • 응답) <숫자응답>, 이동되었으면 1, 실패하면 0
      • 예시
          • 위의 예시를 통해서 셋의 집합요소의 조회 기능에 대한 Redis 명령 및 기능지원을 알수 있음.
          • 셋 데이터는 다양한 방법으로 응용가능한 데이터 타입임.
  • 그외의 명령어는 아래 페이지를 참조부탁드려요^^;

결론

  • Redis 는 중복을 허용하지 않는 집합 형태의 자료구조인 셋 데이터타입을 지원함.
  • 유의할 사항은, 셋은 데이터를 정렬시키지는 않음
  • 셋 데이터의 집합 연산은 명령 수행 비용이 매우 비싼 편에 속하니 잘사용해야함.

  • 오늘의 명언 한마디
    • 현실적인 목표를 세우고, 그런후에 교육과 경험이 늘어남에 따라, 그런 목표들을 개선하거나 추가해라. -로버트 기요사키, 『부자아빠 가난한아빠3』 중에서...

  • 오늘의 영어 한마디
    • 질문) I don't know how you can say that.
      • 그거 대체 무슨 소리입니까?
    • 응답) Yeah, come on.
      • 정말, 너무 하시네요!
    • 해설)
      • I don't know how you can say that. 은 "어떻게 그런식으로 말할 수 있습니까?" 라는 의미로 "웃기지도 않네요"라고 해석 할 수 있음.
      • "Yeah, come on" 은 맞아맞아 라는 의미. 어지간히 좀 하세요 라고 할때도 "come on!" 이라고 함.
728x90
300x250