반응형
셋 데이터에 대해서..
- 셋데이터는 중복을 허용하지 않는 집합 형태의 자료구조.
- 유의사항으로, 셋 데이터의 정렬은 되어 있지 않음.
- 셋데이터에는 2의 32승-1개의 값을 저장할 수 있음.
- 숫자로 바꾸어보면...대략 42억개가 넘게됨...^^;
- 값이 저장될 때 중복에 대한 확인이 일어남.
- 셋 데이터의 내부 구현은 해시 구조이기 때문에 저장된 요소의 개수에 상관없이 동일한 시간 복잡도를 가짐.
- 셋 데이터 구조
-
- 하나의 Key 에 여러개의 요소가 저장되며, 집합연산이 가능한 구조.
- 집합연산
- 합집합
- sunion 명령
- 교집합
- sinter 명령
- 차집합
- sdiff 명령
- 합집합
- 집합연산
- 하나의 Key 에 여러개의 요소가 저장되며, 집합연산이 가능한 구조.
-
셋의 주요 명령어
- 셋의 집합 연산
- sunion
- 주어진 키에 저장된 요소들의 합집합을 돌려줌.
- 명령) sunion [key1] [key2]
- 응답) <멀티벌크응답>, 합집합에 해당하는 값 목록
- 주어진 키에 저장된 요소들의 합집합을 돌려줌.
- sinter
- 주어진 키에 저장된 요소들의 교집합을 돌려줌.
- 명령) sinter [key1] [key2]
- 응답) <멀티벌크응답>, 교집합에 해당하는 값 목록
- 주어진 키에 저장된 요소들의 교집합을 돌려줌.
- sdiff
- 주어진 키에 저장된 요소들의 차집합을 돌려줌.
- 명령) sdiff [key1] [key2]
- 응답) <멀티벌크응답>, 차집합에 해당하는 값 목록
- 주어진 키에 저장된 요소들의 차집합을 돌려줌.
- 예시
-
- 위의 예시를 통해서, 합집합, 교집합, 차집합에 대해서 연산이 가능함을 알 수 있음.
- 시스템에 따라 차이는 있지만, 평균적으로 수백개 정도의 요소를 가진 셋 데이터에 대한 집합연산은 시스템에 큰 부하를 주지 않음.
- 단, 셋 데이터의 집합 연산은 명령 수행 비용이 매우 비싼 편에 속함.
- 즉, 셋 데이터의 집합연산이 많아지면 자연스레 레디스의 전체적인 성능도 저하됨.
- 그래서, 집합연산은 반드시 필요한 상황에서만 사용하도록 하자구요.^^;
- 즉, 셋 데이터의 집합연산이 많아지면 자연스레 레디스의 전체적인 성능도 저하됨.
-
- sunion
- 셋의 집합 요소 조회
- Redis 의 셋 데이터는 매우 다양한 데이터 조회 명령을 제공함.
- scard
- 주어진 Key에 저장된 요소들의 개수를 돌려줌.
- 만약, 주어진 Key가 존재하지 않으면 0을 돌려줌.
- 명령) scard [key]
- 응답) <숫자응답>, 저장된 요소의 개수
- 주어진 Key에 저장된 요소들의 개수를 돌려줌.
- srem
- 주어진 Key에 저장된 요소를 제거하고 제거된 요소의 개수를 돌려줌.
- 만약, 주어진 Key or 해당 요소가 존재하지 않으면 0을 돌려줌.
- 명령) srem [key] [value1] [value2] ...
- 응답) <숫자응답>, 제거된 값의 수
- 주어진 Key에 저장된 요소를 제거하고 제거된 요소의 개수를 돌려줌.
- spop
- 주어진 Key에 저장된 요소 중에서 임의의 요소를 제거하고 제거된 요소를 돌려줌.
- 만약, 주어진 Key가 존재하지 않으면 nil 을 돌려줌.
- 명령) spop [key]
- 응답) <벌크응답>, 제거된 값
- 주어진 Key에 저장된 요소 중에서 임의의 요소를 제거하고 제거된 요소를 돌려줌.
- sismember
- 입력된 요소가 주어진 Key에 저장되어 있는지 검사함.
- 만약 주어진 Key가 존재하지 않으면 0을 돌려줌.
- 명령) sismember [key] [value]
- 응답) <숫자응답>, 존재하면 1, 존재하지 않으면 0
- 입력된 요소가 주어진 Key에 저장되어 있는지 검사함.
- smove
- 원본Key에 저장된 요소를 대상Key로 이동하고 이동결과를 돌려줌.
- 만약, 원본 Key가 존재하지 않으면 결과로 0을 돌려줌.
- 만약, 대상 Key가 존재하지 않으면, 새로운 셋 데이터를 생성하고 요소를 이동시킴.
- 명령) smove [원본key] [대상key] [value]
- 응답) <숫자응답>, 이동되었으면 1, 실패하면 0
- 원본Key에 저장된 요소를 대상Key로 이동하고 이동결과를 돌려줌.
- 예시
-
- 위의 예시를 통해서 셋의 집합요소의 조회 기능에 대한 Redis 명령 및 기능지원을 알수 있음.
- 셋 데이터는 다양한 방법으로 응용가능한 데이터 타입임.
-
- scard
- 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!" 이라고 함.
- 질문) I don't know how you can say that.
300x250
'좋아하는 것_매직IT > 9.redis' 카테고리의 다른 글
13.Redis, 리스트 데이터에 대해서 알아보자. (0) | 2021.01.14 |
---|---|
12.Redis, 정렬된 셋 데이터에 대해서 알아보자. (0) | 2021.01.14 |
10.Redis, 해시 데이터에 대해서 알아보자. (0) | 2021.01.14 |
9.Redis, 문자열 데이터에 대해서 알아보자. (0) | 2021.01.14 |
8.Redis, 레디스의 데이터 구조 그리고 키는 어떻게 설계할까요? (0) | 2021.01.13 |