[Redis] Redis 자료구조와 주요 명령어
Redis는 다양한 자료구조가 존재하며, 각 자료구조에 따라 데이터를 저장하고 처리하는 주요 명령어들에 대해 정리한 내용입니다.
Redis 자료구조와 주요 명령어
1. String
Redis에서 가장 기본이 되는 자료구조로, 단일 값을 저장하는 형태입니다. 문자열, 숫자, JSON 등 다양한 형식의 데이터를 저장할 수 있습니다.
특징:
- 최대 512MB 크기의 값을 저장할 수 있습니다.
- 숫자형 데이터를 지원하여 INCR, DECR와 같은 연산을 할 수 있습니다.
주요 명령어
명령어 설명 SET[key] [value]해당 키에 값을 저장합니다. GET[key]해당 키의 값을 가져옵니다. INCR[key]해당 키에 저장된 값을 1 씩 증가시킵니다. DECR[key]해당 키에 저장된 값을 1씩 감소시킵니다. APPEND[key] [value]키에 저장된 기존 값에 새로운 값을 추가합니다. MGET[key1] [key2] …여러 키의 값을 한 번에 가져옵니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
127.0.0.1:6379> SET jh:hobby soccer
OK
127.0.0.1:6379> GET jh:hobby
"soccer"
127.0.0.1:6379> SET jh:age 28
OK
127.0.0.1:6379> INCR jh:age
(integer) 29
127.0.0.1:6379> DECR jh:age
(integer) 28
127.0.0.1:6379> SET redis:test hello
OK
127.0.0.1:6379> APPEND redis:test " world"
(integer) 11
127.0.0.1:6379> GET redis:test
"hello world"
127.0.0.1:6379> MGET jh:hobby jh:age redis:test
1) "soccer"
2) "28"
3) "hello world"
127.0.0.1:6379>
2. List
리스트는 순서가 있는 문자열의 연결 리스트로, 값을 앞이나 뒤에 추가할 수 있습니다.
특징:
- 데이터의 추가는 리스트의 양쪽 끝(LPUSH, RPUSH)에서 가능하며, 빠른 삽입/삭제가 가능합니다.
- 데이터는 양 끝에서 읽기(LPOP, RPOP) 가 가능하며, 중간 데이터를 조회하려면 인덱스를 사용할 수 있습니다.
주요명령어
명령어 설명 LPUSH[key] [value]리스트의 왼쪽(앞쪽)에서 요소를 추가합니다. RPUSH[key] [value]리스트의 오른쪽(뒤쪽)에서 요소를 추가합니다. LPOP[key]리스트의 왼쪽에서 요소를 제거하고 반환합니다. RPOP[key]리스트의 오른쪽에서 요소를 제거하고 반환합니다. LRANGE[key] [start idx] [stop idx]리스트의 특정 범위에 있는 요소를 반환합니다. (stop idx -1 하면 전부 불러옴) LLEN[key]리스트의 길이를 반환합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> LPUSH test:list 1
(integer) 1
127.0.0.1:6379> RPUSH test:list 2
(integer) 2
127.0.0.1:6379> LRANGE test:list 0 -1
1) "1"
2) "2"
127.0.0.1:6379> LPOP test:list
"1"
127.0.0.1:6379> LRANGE test:list 0 -1
1) "2"
127.0.0.1:6379> RPOP test:list
"2"
127.0.0.1:6379> LRANGE test:list 0 -1
(empty array)
127.0.0.1:6379> LLEN test:list
(integer) 0
3. Set
- 중복을 허용하지 않는 순서 없는 데이터의 집합입니다.
- 특징
- 중복된 요소를 허용하지 않습니다.
- 교집합, 합집합, 차집합 연산을 제공하여 집합 관련 연산을 쉽게 수행할 수 있습니다.
- 주요명령어
| 명령어 | 설명 |
|---|---|
SADD [key] [value] | 집합에 요소를 추가합니다. |
SMEMBERS [key] | 집합에 있는 모든 요소를 반환합니다. |
SREM [key] [value] | 집합에서 특정 요소를 제거합니다. |
SISMEMBER [key] [value] | 특정 요소가 집합에 포함되어 있는지 확인합니다. |
SCARD [key] | 집합의 요소 개수를 반환합니다. |
SDIFF [key1] [key2] | 두 집합 간의 차집합을 반환합니다. |
SINTER [key1] [key2] | 두 집합 간의 교집합을 반환합니다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
127.0.0.1:6379> SADD test:set 1
(integer) 1
127.0.0.1:6379> SADD test:set 2
(integer) 1
127.0.0.1:6379> SADD test:set 3
(integer) 1
127.0.0.1:6379> SADD test:set 4
(integer) 1
127.0.0.1:6379> SMEMBERS test:set
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> SREM test:set 4
(integer) 1
127.0.0.1:6379> SMEMBERS test:set
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SISMEMBER test:set 1
(integer) 1
127.0.0.1:6379> SISMEMBER test:set 10
(integer) 0
127.0.0.1:6379> SCARD test:set
(integer) 3
127.0.0.1:6379> SADD test:set:2 1
(integer) 1
127.0.0.1:6379> SADD test:set:2 3
(integer) 1
127.0.0.1:6379> SADD test:set:2 4
127.0.0.1:6379> SINTER test:set test:set:2
1) "1"
2) "3"
127.0.0.1:6379> SDIFF test:set test:set:2
1) "2"
4. Hash
- 필드와 값으로 이루어진 데이터 쌍을 저장하는 자료구조입니다.
- 특징
- 간단한 객체를 저장하는데 적합하며, 필드 단위로 값을 추가, 조회, 삭제할 수 있습니다.
- 메모리 효율이 좋아 작은 데이터를 저장할 때 유리합니다.
- 주요 명령어
| 명령어 | 설명 |
|---|---|
HSET [key] [field] [value] | 해시의 필드에 값을 저장합니다. |
HGET [key] [field] | 해시에서 특정 필드의 값을 가져옵니다. |
HGETALL [key] | 해시의 모든 필드와 값을 가져옵니다. |
HDEL [key] [field] | 해시에서 특정 필드를 삭제합니다. |
HEXISTS [key] [field] | 해시에 특정 필드가 존재하는지 확인합니다. |
HLEN [key] | 해시에 있는 필드의 개수를 반환합니다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> HSET test:hash name JH
(integer) 1
127.0.0.1:6379> HSET test:hash age 28
(integer) 1
127.0.0.1:6379> HGET test:hash name
"JH"
127.0.0.1:6379> HGETALL test:hash
1) "name"
2) "JH"
3) "age"
4) "28"
127.0.0.1:6379> HDEL test:hash name
(integer) 1
127.0.0.1:6379> HEXISTS test:hash name
(integer) 0
127.0.0.1:6379> HLEN test:hash
(integer) 1
5. Sorted Set (ZSet)
- Sorted Set은 Set과 유사하지만 각 요소가 점수(Score) 를 가지며, 점수를 기준으로 정렬됩니다.
- 특징
- 데이터는 점수를 기준으로 오름차순으로 정렬되어 저장됩니다.
- 범위 기반 조회와 순위 계산이 가능합니다.
- 주요 명령어
| 명령어 | 설명 |
|---|---|
ZADD [key] [score] [member] | 점수와 함께 요소를 추가합니다. |
ZRANGE [key] [start] [stop] | 지정된 범위의 요소를 반환합니다. |
ZRANGE [key] [start] [stop] WITHSCORES | 지정된 범위의 요소와 그 점수를 함께 반환합니다. |
ZREM [key] [member] | 특정 요소를 삭제합니다. |
ZINCRBY [key] [increment] [member] | 특정 요소의 점수를 증가시킵니다. |
ZSCORE [key] [member] | 특정 요소의 점수를 반환합니다. |
ZCARD [key] | Sorted Set의 요소 개수를 반환합니다. |
ZRANK [key] [member] | 요소의 순위를 반환합니다. |
ZREVRANGE [key] [start] [stop] | 점수가 높은 순서대로 요소를 반환합니다. |
ZREVRANGE [key] [start] [stop] WITHSCORES | 점수가 높은 순서대로 요소와 점수를 반환합니다. |
ZCOUNT [key] [min] [max] | 지정된 범위의 점수를 가진 요소 개수를 반환합니다. |
ZREMRANGEBYSCORE [key] [min] [max] | 지정된 점수 범위의 요소를 삭제합니다. |
ZREMRANGEBYRANK [key] [start] [stop] | 지정된 순위 범위의 요소를 삭제합니다. |
6. Bitmap
- String 자료구조를 비트 단위로 처리할 수 있는 자료구조입니다. 효율적으로 많은 데이터를 저장하고 처리할 수 있습니다.
- 특징
- 비트 연산을 통해 효율적인 메모리 사용이 가능합니다.
- 주로 사용자 로그인 여부, 플래그 등을 저장할 때 사용됩니다.
- 주요명령어
| 명령어 | 설명 |
|---|---|
SETBIT [key] [offset] [value] | 지정된 오프셋 위치의 비트를 설정합니다. |
GETBIT [key] [offset] | 지정된 오프셋 위치의 비트를 반환합니다. |
BITCOUNT [key] [start] [end] | 문자열에서 설정된 비트 수를 반환합니다. (start, end는 선택 사항) |
BITOP [operation] [destkey] [key1] [key2] | 여러 키에 대해 비트 연산을 수행합니다. (AND, OR, XOR, NOT) |
BITPOS [key] [bit] [start] [end] | 지정된 비트(0 또는 1)의 첫 번째 위치를 찾습니다. (start, end는 선택 사항) |
7. HyperLogLog
- HyperLogLog는 고유한 값의 개수를 매우 적은 메모리로 추정하는 자료구조입니다.
- 특징
- 매우 큰 데이터 집합에서 고유 요소의 개수를 계산할 때 사용됩니다.
- 약간의 추정 오차가 발생하지만, 메모리 효율성이 매우 높습니다.
- 주요명령어
| 명령어 | 설명 |
|---|---|
PFADD [key] [element] | HyperLogLog에 새로운 요소를 추가합니다. |
PFCOUNT [key] | HyperLogLog에 저장된 고유 요소의 개수를 추정하여 반환합니다. |
PFMERGE [destkey] [sourcekey1] [sourcekey2] | 여러 HyperLogLog를 하나로 병합합니다. |
8. Geospatioal
- Redis는 지리적 좌표 데이터를 저장하고 처리할 수 있는 기능을 제공합니다.
- 특징
- 특정 반경 내의 좌표를 검색하거나, 좌표 간의 거리를 계산할 수 있습니다.
- 주요명령어
| 명령어 | 설명 |
|---|---|
GEOADD [key] [longitude] [latitude] [member] | 지정된 좌표와 함께 요소를 추가합니다. |
GEODIST [key] [member1] [member2] [unit] | 두 요소 간의 거리를 반환합니다. (unit: m, km, mi, ft) |
GEORADIUS [key] [longitude] [latitude] [radius] [unit] | 주어진 반경 내의 요소들을 반환합니다. |
GEORADIUSBYMEMBER [key] [member] [radius] [unit] | 지정된 요소를 중심으로 반경 내의 요소들을 반환합니다. |
GEOHASH [key] [member] | 요소의 지리적 해시 값을 반환합니다. |
GEOPOS [key] [member] | 요소의 좌표(경도, 위도)를 반환합니다. |
This post is licensed under CC BY 4.0 by the author.
