[Redis]Sets,Hashes

SeungJoo
|2024. 5. 2. 11:18
728x90

Sets

집합(SET)은 수학에서 유래된 개념으로, 중복을 허용하지 않고 순서에 상관없이 요소를 저장하는 데이터 구조입니다. 프로그래밍에서 집합은 자료형 중 하나로, 각각의 요소가 유일해야 하며 일반적으로 해시 테이블을 이용하여 구현됩니다. 이로 인해 집합 내의 요소들은 정렬되지 않습니다.

주요 특징

중복 없음

집합에 같은 요소가 두 번 추가될 수 없습니다.

순서 없음

요소들은 특정 순서로 저장되거나 반환되지 않습니다.

효율적인 연산

레디스 집합 연산은 일반적으로 매우 빠르며, 요소의 추가, 삭제, 조회가 O(1) 시간 복잡도로 이루어질 수 있습니다.

기본 연산

SADD

추가(SADD) 하나 이상의 요소를 집합에 추가합니다.

$ SADD user:1:fruits apple banana orange orange

user:1:fruits 집합에 apple, banana, orange를 추가

orange가 중복되어 있으나 집합은 중복 값을 허용하지 않으므로 Orange가 중복되어 있으나 집합은 중복 값을 허용하지 않으므로 결과적으로 Orange는 한 번만 저장됩니다.

$ SMEMBERS user:1:fruits

user:1:fruits 집합의 모든 요소를 나열합니다.

SREM

삭제(SREM) 집합에서 하나 이상의 요소를 제거합니다.

SISMEMBER

멤버 확인(SISMEMBER) 특정 요소가 집합에 속해 있는지 확인합니다.

$ SISMEMBER user:1:fruits banana

user:1:fruits 집합의 요소 개수를 반환합니다.

SCARD

요소 개수(SCARD) 집합의 요소 개수를 반환합니다.

$ SCARD user:1:fruits

user:1:fruits 집합의 요소 개수를 반환합니다.

또 다른 집합 생성 및 추가

$ SADD user:2:fruits apple lemon

새로운 집합 user:2:fruits에 apple, lemon을 추가합니다.

user:2:fruits 집합은 {apple, lemon}을 포함합니다.

집합 간 연산

SINTER

교집합(SINTER) 두 개 이상의 집합의 교집합을 구합니다. ex) 집합 A = {1,2,3}과 집합 B = {2,3,4} 교집합은 {2,3}입니다.

$ SINTER user:1:fruits user:2:fruits

두 집합 user:1:fruits와 user:2:fruits의 교집합을 구합니다.

SUNION

합집합(SUNION) 두 개 이상의 집합의 합집합을 구합니다. ex) 집합 A = {1,2,3}과 집합 B = {2,3,4}의 합집합은 {1, 2, 3, 4}입니다.

$ SUNION user:1:fruits user:2:fruits

두 집합 user:1:fruits와 user:2:fruits의 합집합을 구합니다.

SDIFF

차집합(SDIFF) 두 개 이상의 집합 간 차집합을 구합니다. ex) 집합 A={1,2,3}에서 집합 B = {2,3,4}를 빼면 {1}이 됩니다.

$ SDIFF user:1:fruits user:2:fruits

user:1:fruits 집합에서 user:2:fruits 집합을 뺀 차집합을 구합니다.

user:1:fruits에만 banana와 orange에만 존재합니다.

기타 고급 연산

SINTERSTORE

교집합 저장(SINTERSTORE) 교집합의 결과를 새로운 집합으로 저장합니다.

SUNIONSTORE

합집합 저장(SUNIONSTORE) 합집합의 결과를 새로운 집합으로 저장합니다.

SDIFFSTORE

차집합 저장(SDIFFSTORE) 차집합의 결과를 새로운 집합으로 저장합니다.

레디스에서 집합을 사용하는 주요 이점 중 하나는 서버 측에서 데이터를 빠르게 처리할 수 있다는 점입니다. 이는 특히 대규모 데이터를 다룰 때 네트워크 오버헤드를 크게 줄여 줍니다. 또한, 레디스는 이러한 연산을 원자적으로 처리하므로, 여러 클라이언트가 동시에 같은 데이터에 액세스 하더라도 일관성을 유지할 수 있습니다.

Hashes

레디스에서 Hash는 키-값쌍의 집합을 저장하는 데 사용되는 데이터 타입입니다. 이는 특히 객체의 다양한 속성을 저장하고 관리할 때 유용합니다. 해시는 기본적으로 필드와 값의 매핑을 통해 구성되며, 각 필드는 유일한 식별자로 동작합니다.

HSET

$ HSET lecture name inflearn-redis price 100 language ko

HSET 명령어는 지정한 해시에 여러 필드 name, price, language와 각 필드 값을 설정합니다. 해시가 존재하지 않으면 새로 생성하고, 필드가 이미 존재하면 값을 업데이트합니다. 반환값은 신규 추가된 필드의 수이며, 필드가 존재하고 값만 업데이트되었다면 0이 반환됩니다.

HGET

$ HGET lecture name

HGET 명령은 lecture 해시에서 name필드의 값을 가져옵니다. 이 경우 joo 값이 반환되며 필드가 존재하지 않는다면 null이나 nil값이 반환됩니다.

HMGET

$ HMGET lecture price language invalid

한 번의 호출로 여러 필드의 값을 동시에 조회합니다. lecture 해시에서 price, language, 그리고 invalid 필드 값을 순서대로 반환합니다. price와 language 필드는 각 100, ko값을 가지며 invalid 필드는 존재하지 않기 때문에 nil 또는 null이 반환됩니다.

HINCRBY

$ HINCRBY lecture price 10

해시의 특정 필드 값을 정수만큼 증가시킵니다. 이 명령은 lecture 해시의 price 필드 값을 10만큼 증가시키며 pirce의 원래 값이 100이었기 때문에 명령 후의 값은 110이 됩니다.

타입 에러 발생 이유

inc rease by는 기본적으로 숫자형 스트링에만 사용가능합니다

 

728x90

'DB' 카테고리의 다른 글

[Redis] Sorted Sets, Streams  (0) 2024.05.03
[Redis] String, List  (1) 2024.05.01
REDIS  (1) 2024.04.30