- Redis Data Type 22023년 06월 02일
- starryeye
- 작성자
- 2023.06.02.:04
Redis 가 지원하는 Data Type 에 대해서 계속 알아보자..
3. Sets
Lists 와 동일하게 Key 하나에 Value 가 여러개의 집합으로 이루어져 있다.
Value 만을 본다면, C++ 에서 unordered_set 과 비슷한 역할이다.
특징
1. 순서가 없고 유니크한 값의 집합
2. 개별 접근을 위한 인덱스가 존재하지 않지만, 개별 값의 존재 여부는 빠르게 체크 할 수 있다.
3. 집합 연산이 존재한다. (합집합, 교집합 등)
4. 활용
알고리즘 Union, Hash Table, Hash Set 등에 해당되는 모든 상황에서 활용가능하다.
> 특정 시간동안 유저 한명 당 한번의 유효한 쿠폰을 발급하는 요구사항이 있을 때,
개발자는 Redis 의 Sets 를 사용할 수 있다.
특정 시간동안 어떤 유저가 쿠폰을 발급 받았는지 여부를 빠르게 확인할 필요가 있는데
이 때, 해당 유저의 Id 를 Sets 의 Value 로 적재하면 빠른 체크가 가능하다.
5. 대표적 명령어
Key - Value 로 이루어져 있어서 map 과 같이 느껴지는데 Key 는 변수명으로 생각하면 편하다..
명령어 기능 SADD [Key] [Value] Key 값에 해당하는 Set 에 Value 를 추가한다.
(Key 없으면 생성, Value 가 이미 존재하면 Set 변함 없음)
O(1)SREM [Key] [Value] Key 값에 해당하는 Set 에 Value 를 삭제한다. SMEMBERS [Key] Key 값에 해당하는 Set 에 저장된 모든 Value 를 조회한다.
O(N)SCARD [Key] Key 값에 해당하는 Set 에 저장된 모든 Value 의 갯수를 조회한다.
O(1)SRANDMEMBER [Key] [Count] Key 값에 해당하는 Set 에 저장된 Value 중
무작위로 Count 개 만큼 반환받는다.SISMEMBER [Key] [Value] Key 값에 해당하는 Set 에 Value 라는 값이 존재하는지 확인한다.
해당 Sets 에 Value 총 갯수와 무관하게 빠른 속도 보장
O(1)http://redisgate.kr/redis/command/sets.php
6. 예시
> user:123:favorites 라는 Key 에 해당하는 Set 에 347, 561, 742, 561 의 Value 를 추가하고 있다.
> user:123:favorites 라는 Key 에 해당하는 Set 에 742 라는 Value 는 존재하고, 299 라는 Value 는 존재하지 않는다.
> user:123:favorites 라는 Key 에 해당하는 Set 과 user:456:favorites 라는 Key 에 해당하는 Set 의 교집합을 구한다.
> user:123:favorites 라는 Key 에 해당하는 Set 에 저장된 모든 Value 의 갯수를 반환 받았다.
https://redis.io/docs/data-types/sets/
4. Hashes
Key 하나에 Value 로 여러개의 field(key)-value 쌍을 가지고 있는 형태이다.
-> 여러 필드를 가진 객체를 저장하는 것으로 생각
-> Key 는 변수명이고 Value 는 C++의 unordered_map 라 생각하면 편하다.
특징
1. Value 로 Json, 객체, 관계형 DB 의 Table 등을 넣기 편하다.
2. Redis Strings 에서 Value 로 Json 을 넣은 상황과 동일하지만,
Redis Hashes 는 특정 필드 값을 지정해서 접근할 수 있다는 차이점이 있다.
3. Value 에 해당하는 field(key)-value 쌍을 약 40 억개 까지 저장이 가능하다.
4. 활용
C++ 의 unordered_map 을 사용하는 알고리즘에 응용 가능하다.
user1 에 방문 수, 클릭 수, 좋아요 수 등의 필드를 지정해놓고,
HINCRBY 명령어를 활용하여 각 value 를 counter 로 사용할 수 있다.
5. 대표적 명령어
명령어 기능 HSET [Key] [field] [value] Key 값에 해당하는 Hashes 에 field-value 쌍을 Value로 저장한다.
O(1)HGET [Key] [field] Key 값에 해당하는 Hashes 에서 field 값에 해당하는 value 를 조회한다.
O(1)HLEN [Key] Key 값에 해당하는 Hashes 에 속한 모든 field 갯수를 반환 받는다.
O(1)HMSET [Key] [field] [value] [field] [value] ...
HMGET [Key] [field] [field] ...Key 값에 해당하는 Hashes 에 field-value 쌍들을 저장한다.
Key 값에 해당하는 Hahses 에서 field 값들에 해당하는 value 들을 조회 한다.HKEYS [Key] Key 값에 해당하는 Hashes 에 속한 모든 field 의 name 을 반환 받는다. HINCRBY [Key] [field] [Increment] Key 값에 해당하는 Hashes 에서 field 값에 해당하는 value 를 Increment 만큼 증가 시킨다. (필드 값은 Integer) HDEL [Key] [field] [field] ... Key 값에 해당하는 Hashes 에서 field 를 삭제한다. http://redisgate.kr/redis/command/hashes.php
6. 예시
> user:123 이라는 Key 에 해당하는 Hashes 에...
field: username, value: martina
field: firstname, value: Martina
field: lastname, value: Elisa
field: country, value: GB
를 저장한다.
> user:123 이라는 Key 에 해당하는 Hashes 에 username 이라는 field 의 value 를 반환받는다.
> user:123 이라는 Key 에 해당하는 Hashes 의 모든 field-value 쌍을 반환받는다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 1 증가 시킨다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 1 증가 시킨다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 errors 라는 field 의 value 를 1 증가 시킨다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 requests 라는 field 의 value 를 1 증가 시킨다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 pings 라는 field 의 value 를 반환 받는다.
> device:777:stats 이라는 Key 에 해당하는 Hashes 에 request, errors 라는 field 들의 value 를 반환 받는다.
'DataBase > NoSQL' 카테고리의 다른 글
Redis Core, I/O, Transaction, Lock (0) 2023.06.03 Redis Data Type 3 (0) 2023.06.02 Redis Data Type 1 (0) 2023.06.02 Redis 시작해보기 (0) 2023.06.01 MongoDB Sharded Cluster (0) 2023.06.01 다음글이전글이전 글이 없습니다.댓글