Post

[Redis] Redis 자료구조와 주요 명령어

스크린샷 2024-10-04 오후 2.06.22

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.