❐ Description
Redis의 다양한 자료구조의 종류와 그 특징에 대해서 알아보고,
Redis의 키를 관리하는 법을 학습하자.
❐ Redis Data Structure
1. String
가장 간단한 자료구조
512MB의 문자열 데이터를 저장할 수 있다.
모든 종류의 문자열이 binary-safe하다.
INCR, INCRBY와 같은 커맨드는 string 자료 구조에 저장된 숫자를 원자적(atomic)으로 조작할 수 있다.
이러한 커맨드는 Race condition을 발생시킬 일이 없다.
A와 B가 동시에 10이라는 데이터를 가지고 있는 키에 INCR 커맨드를 수행하더라도 하나의 커맨드만 수행돼
11이 저장되는 상황이 발생하지 않는다.
2. list
하나의 list에는 최대 42억여 개의 아이템을 저장할 수 있다.
일반적으로 stack과 queue로서 사용된다.
LPUSH : list의 왼쪽에 데이터 추가
RPUSH : list의 오른쪽에 데이터 추가
LRANGE : list의 아이템 탐색 (0 ~ -1 : 전체 데이터 출력)
LPUSH와 LTRIM 커맨드를 함께 사용하면 고정된 길이의 큐를 쉽게 유지할 수 있다.
리스트의 로그를 저장하는 상황에서 레디스의 list에 최대 1000개의 로그 데이터를
보관하고 싶다면?
- LPUSH logdata <data>
- LTRIM logdata 0 999
로그 데이터를 배치 처리를 이용해 삭제하는 것보다 LPUSH와 LTRIM을 사용하는
것이 훨씬 효율적
3. hash
칼럼이 고정된 관계형 데이터베이스의 테이블과 달리, hash에서 필드를 추가하는 것은 간단하다.
hash에서는 각 아이템마다 다른 필드를 가질 수 있으며, 동적으로 다양한 필드를 추가할 수 있다.
127.0.0.1:6379> HSET Product:001 Name "iphone" Version "15 pro"
(integer) 2
127.0.0.1:6379> HMGET Product:001 Name Version
1) "iphone"
2) "15 pro"
4. set
정렬되지 않은 문자열 모음.
중복해서 저장되지 않음.
교집합, 합집합, 차집합 등의 집합 연산과 관련한 커맨드를 제공한다.
- SADD : 저장되는 실제 아이템의 수 반환
- SMEMERS : set 자료구조에 저장된 전체 아이템을 출력(출력은 랜덤)
- SREM : 원하는 아이템을 삭제할 수 있다.
- SPOP : 랜덤으로 아이템을 삭제한다.
127.0.0.1:6379> SADD set:111 A B C D E
(integer) 5
127.0.0.1:6379> SADD set:222 D E F G H
(integer) 5
127.0.0.1:6379> SINTER set:111 set:222
1) "D"
2) "E"
127.0.0.1:6379> SDIFF set:111 set:222
1) "A"
2) "B"
3) "C"
127.0.0.1:6379> SUNION set:111 set:222
1) "A"
2) "B"
3) "C"
4) "D"
5) "E"
6) "F"
7) "G"
8) "H"
5. sorted set
스코어(score) 값에 따라서 정렬되는 고유한 문자열의 집합
🚧 Note ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
list와 sorted set 모두 순서를 갖는 자료구조이므로 인덱스를 이용해 아이템에 접근할 수 있다.
하지만 인덱스를 이용해 아이템에 접근할 일이 많다면, list아닌 sorted set을 사용하는 것이 더
효율적이다. 왜냐면 list는 인덱스를 이용해 데이터 접근하는 것은 O(n)으로 처리되지만,
sorted set에서는 O(logN)으로 처리되기 때문이다.
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
스코어는 배정밀도 부동소수점 숫자(double precision floating point number)를 문자열로
표현한 값이어야 한다.
ZADD test:111 "2.0" second
ZADD test:222 2.0 second
🧩 Index로 데이터 조회하기 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
127.0.0.1:6379> ZRANGE score:220817 1 3 WITHSCORES REV
user:F
200
user:C
150
user:A
150
127.0.0.1:6379> ZREVRANGE score:220817 1 3 WITHSCORES
user:F
200
user:C
150
user:A
150
127.0.0.1:6379> ZRANGE score:220817 0 -1
user:B
user:A
user:C
user:F
user:E
127.0.0.1:6379> ZRANGE score:220817 0 -1 WITHSCORES
user:B
100
user:A
150
user:C
150
user:F
200
user:E
300
🧩 Score로 데이터 조회하기 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
127.0.0.1:6379> ZRANGE score:220817 100 150 BYSCORE WITHSCORES
user:B
100
user:A
150
user:C
150
🧩 사전순으로 데이터 조회하기 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
127.0.0.1:6379> ZRANGE mySortedSet (b (f BYLEX
banana
candy
dream
egg
Start와 Stop에는 사전 순으로 비교하기 위한 문자열을 전달해야 하며, 이때 반드시 `(`나 `[` 문자를
함께 입력해야 한다. 입력한 문자열을 포함하려면 `[`을, 포함하지 않을 때 에는 `(` 문자를 사용한다.
6. 비트맵
7. Hyperloglog
8. Geospatial
9. Stream
❐ Redis Key Managing
1. Scan
- 커서 기반으로 동작
- COUNT 옵션은 적용이 안될 수 있음
'Back-End > Redis' 카테고리의 다른 글
Redis를 캐시로 사용하기 (0) | 2024.12.20 |
---|---|
Redis 자료구조 활용 사례 (0) | 2024.12.18 |
Redis 설정하기 (0) | 2024.12.17 |
마이크로서비스 아키텍쳐와 레디스 (0) | 2024.12.16 |
ReadMe (0) | 2024.12.16 |