Redis 자료형과 기능

S_H_H·2025년 2월 26일
0

실전 레디스

목록 보기
1/7
post-thumbnail

다시 기억하고자 정리한 글
내가 다시 알아볼 수 있게 정리한 글이라 책에 적힌 순서와 내용이 다를 수 있음을 밝힘

자료형

String 형

String형은 문자열, 이진 데이터 등을 위한 자료형, 이미지나 실행파일 등 문자열 이외의 데이터도 저장할 수 있습니다.

  • 특징
    • key - value 1:1로 대응하는 간단한 자료형
    • binary safe 문자열
  • use case
    • cache
    • count

주요 명령어

String 형은 값을 저장할 때 SET, 값을 불러올 때 GET을 사용합니다.
이미 존재하는 키에 쓰기 작업을 수행하면 기본적으로 덮어지게 됩니다.
자세한 내용은 레디스 공식 문서 String 참조

value type 상관없이 사용

Commands설명
GET> GET Key로 key에 대한 value 값을 가져옵니다. 키가 존재하지 않는 경우 nil을 반환
SET> SET Key value로 값을 저장합니다.
MGET> MGET key1 key2로 n개의 key에 대한 value를 가져옵니다.
MSET> MSET key1 val1 key2 val2로 n개의 값을 한번에 저장할 수 있습니다.
APPEND> APPEND key val 키가 존재하는 경우 val 값을 추가합니다. 존재하지 않는 경우에는 새로운 key를 만듭니다.
STRLENkey값의 문자열 길이를 반환
GETRANGEkey 값을 기준으로 범위를 지정하여 데이터를 반환
SETRANGE지정한 옵셋의 위치를 중심으로 키값을 저장
GETDEL값을 가져오고 동시에 해당 키를 삭제
MSETNX여러 값을 저장하는 것은 동일하나, 하나의 key 값이라도 존재하는 경우에 저장에 실패

value 숫자인 경우

Commands설명
INCR값을 1만큼 증가
키가 존재하지 않는 경우에는 0을 값으로 저장 (아래 명령어 동일)
INCRBY값을 지정한 값만큼 증가
INCRBYFLOAT부동 소수점으로 표현된 값을 지정한 값만큼 증가
DECR값을 1만큼 감소
DECRBY값을 지정한 값만큼 감소

TTL 설정하기

key에 TTL을 설정할 수 있습니다.

> SETEX key 100 val
> TTL key
> 90

key 값에 100초를 설정하고, 10초 뒤 TTL을 조회 시 90초로 조회됩니다.
이미 저장된 key에 대해서는 EXPIRE key 100 지정 가능하며 SETEX 대신 SET key val EX 100으로 가능합니다.

SET 명령어와 옵션

  • EX/PX
    TTL 만료 시간 설정, EX 초 단위 PX는 밀리초 단위
  • NX/XX
    • 키의 존재 여부에 따라 조건을 충족할 때만 저장
    • NX 키가 존재하지 않는 경우, XX 키가 존재하는 경우
  • KEEPTTL
    • 키 관련 TTL을 변경하지 않고 조작
  • EXAT/PXAT
    • 유닉스 시간을 사용하여 유효 시간을 설정
    • EXAT 초 단위, PXAT 밀리초 단위

List 형

값을 삽인한 순서대로 유지하는 자료형, 스택이나 큐등으로 사용하기 좋다.
List 형은 좌우 끝부분에 요소를 추가 및 삭제하거나 부분적으로 요소를 가져오는 등의 동작을 할 수 있습니다. 중간 부터 접근하는 것은 느리며 데이터가 큰 경우 주의가 필요

주요 명령어

자세한 내용은 레디스 공식 문서의 List 형 명령어 참조

Commands설명
LPOP key [COUNT]리스트 왼쪽부터 값을 가져오고 삭제, count 옵션으로 지정한 수 만큼 반환하고 삭제
LPUSH리스트 왼쪽부터 값을 저장
RPOP key [COUNT]리스트 오른쪽부터 값을 가져오고 삭제
RPUSH리스트 오른쪽부터 값을 저장
LMPOP key [LEFT or RIGHT][COUNT count]리스트 왼쪽 or 오른쪽부터 여러 개의 값을 가져오고 삭제
LINDEX key index리스트에서 지정한 인덱스에 값 조회
LINSERT key [BEFORE or AFTER] find_val, save_val지정한 인덱스에 값을 저장, 지정한 인덱스를 찾지 못하면 -1을 반환
LLEN리스트의 길이
LRANGE key a b지정한 범위의 인덱스 값 반환
LREM key count valcount가 양수면 시작->끝, 음수면 끝->시작으로 이동하며 일치하는 개수 만큼 삭제
0인경우는 리스트 내 일치하는 모든 값을 삭제 처리
LSET key index val지정한 인덱스의 값을 갱신
LTRIM key a ba to b 사이에 있는 값으로 리스트 갱신
LPOS key val [RANK rank][COUNT count][MAXLEN len]val에 일치하는 인덱스 반환
RANK 몇 번째, COUNT 일치 개수
LPUSHX리스트가 있는 경우 왼쪽부터 값을 저장
LMOVE key1 key2 [LEFT or RIGHT][LEFT or RIGHT]key1에 있는 val 값을 key2로 값으로 이동 LEFT or RIGHT 옵션에 따라 이동 복사 위치가 달라짐
LPUSHX리스트가 있는 경우에 오른쪽부터 값을 저장

Hash 형

Hash형은 순서 없이 필드와 값이 여러 쌍으로 매핑된 자료 구조. 객체 스토리지로 사용할 수 있습니다.

주요 명령어

자세한 내용은 레디스 공식 문서의 Hash 형 명령어 참조

Commands설명
HDEL key field지정한 해시에서 값을 삭제
HEXISTS key field해시에 필드 존재시 return 1 else 0
HGET key field지정된 값을 반환
HGETALL지정한 해시에 포함된 모든 field key - value 반환
HKEYS지정한 해시에 모든 field key 반환
HLEN필드 수를 반환
HMSET여러 값을 한번에 저장, 이미 존재하는 경우 값을 덮어 씀
HSET key filed value값 저장
HVALS지정한 필드에 모든 값을 반환
HSCAN key curosr [MATCH pattern][COUNT count]필드 집합을 반복 처리하여 필드 이름과 저장된 값의 쌍 목록을 반환
HINCRBYvalue의 값을 지정한 숫자만큼 증가 ( 숫자에만 사용 가능 )
HINCRBYFLOATvalue의 값을 지정한 숫자만큼 증가 ( 숫자에만 사용 가능 )

성능을 발휘하기 위한 주의사항

  • 해시 요소의 개수가 많거나 최대 요소의 개수가 큰 경우

    Hash의 장점인 내부 인코딩의 메모리 압축을 제대로 활용하지 못함

  • 해시 전체 크기가 너무 큰 경우

    샤드 간 데이터 분산이 어려워질 수 있다. String형 키를 사용하여 세부적으로 관리하면 확장이 쉬워진다

  • HDEL 명령어 실행 시간

    필드 수 증가 등으로 커졌을 경우, HDEL 수행 시간이 길어져 다른 명령어가 Block될 수 있다.

Set 형

Set은 여러 값을 순서와 중복 없이 저장할 수 있다.

주요 명령어

자세한 내용은 레디스 공식 문서의 Set 형 명령어 참조

Commands설명
SADD key value값 저장
SCARD key저장된 수를 반환
SISMEMBER key포함 여부 반환
SPOP key [COUNT count]무작위 반환 후 삭제 처리, count 옵션을 지정하는 만큼 반환하고 반환한 데이터는 삭제 처리
SREM key value지정한 값을 삭제 처리
SSCAN key value반족 처리하여 value 목록 반환
SDIFF집합 간 차집합 가져오기
SDIFFSTORE집합 간 차집합 저장하기
SINTER집합간 교집합
SINTERSTORE교집합 저장하기
SUNION집합 간 합집합
SUNIONSTORE합집합 저장하기

Sorted Set 형

각 key 마다 scoure를 가진 멤버로 구성된 하나의 집합이 매핑되며, 중복을 포함하지 않고 순서가 있는 형
Hash형과 Set형을 섞어 놓은 순서 집합이기 때문에 넓은 범위의 데이터 모델을 구현

주요 명령어

자세한 내용은 레디스 공식 문서의 Sorted Set 형 명령어 참조

Commands설명
ZADD값 저장
ZCARD저장된 수 반환
ZRANK오름차순으로 반환
ZREVRANK내림차순으로 반환
ZRANGE범위내에 있는 목록을 오름차순으로 반환
ZRANGESTORE범위내에 있는 목록을 오름차순으로 저장하고 반환
ZREM지정한 값 삭제
ZCOUNT지정한 범위에 있는 수 반환
ZPOPMAX최대인 값을 삭제하고 반환
ZPOPMIN최소인 값을 삭제하고 반환
ZSCORE지정한 key에 대한 scoure 반환
ZMSCORE여러 key에 대한 scoure 반환
ZSCAN반복 처리하여 목록 반환
ZMPOP값이 최대 or 최소인 여러 key 삭제하고 반환

대표 기능과 관련 명령어

비트 맵

비트 배열이라고 불리는 데이터 구조, 비트의 위치를 ID와 연결한 후 그 위치가 1 or 0인지 값을 확인하여 특정 기능의 사용 여부 등을 사용자별로 관리할 수 있습니다.
String 형으로 정의되어 있으며, 비트 연산 등 특정 용도에 특화된 보조 자료형

특정 기간 내 숫자를 세는 용도로 사용하지만 숫자가 적다면 비트맵이 희소한 상태(1로 변경된 비트가 적다)가 되기 때문에 공간 관리 측면에서 비효율적일 수 있습니다.

비트맵으로 사용 가능한 명령어

자세한 내용은 레디스 공식 문서의 Bitmap 형 명령어 참조

Commands설명
GETBIT지정한 오프셋 비트값 반환
SETBIT지정한 오프셋 비트값 설정
BITCOUNT비트 수 가져오기
BITOP비트 연산 결과 산출
BITPOS지정한 비트의 처음 위치 가져오기
BITFIELD여러 비트 필드를 동시 조작
BITFIELD_RO읽기 전용 명령어

지리적 공간 인덱스

주소나 경도, 위도 등 지구상 지리적 위치 정보를 나타냄
공간 정보를 사용하여 사용자로부터 근처 가게를 소개하는 등 사용자 정보를 기반으로 다른 정보를 제시할 수 있다.
내부적으로는 Sorted Set형으로 키가 저장되어 있다.

geo 사용 가능한 명령어

자세한 내용은 레디스 공식 문서의 geo 형 명령어 참조

Pub/Sub 기능

Publisher가 Subscriber에게 정보를 저장하지 않고 메시지를 전송, 채널을 구독하고 있는 구독자들은 모두 메시지를 받아 볼 수 있음

Pub/Sub 사용 가능한 명령어

자세한 내용은 레디스 공식 문서의 pubsub 형 명령어 참조

HyperLogLog

고유한 수를 효과적으로 계산할 수 있는 확률적 계산 방법
오차가 다소 있다는 단점도 있지만, 메모리 공간을 효율적으로 사용할 수 있다는 장점도 있습니다.

방문자 수처럼 대략적인 값을알기만 하면 괜찮은 경우, 정확한 값을 알 필요가 없는 경우 활용

HyperLogLog 사용 가능한 명령어

자세한 내용은 레디스 공식 문서의 HyperLogLog 형 명령어 참조

레디스 스트림

채팅 등과 같은 메시지 교환에도 활용할 수 있으며, 기본적으로는 강력한 메시지 처리 기능을 가진 추가형 자료구조를 사용하고 있습니다.

  • 특징
    • 데이터가 연속으로 대량 발생하는 상황에서 데이터를 추가할 때 특화된 자료 구조
    • 각 엔트리에 여러 필드를 갖도록 구조화된 데이터를 가질 수 있습니다.
    • 과거 데이터도 유지할 수 있습니다.
    • 엔트리 ID 및 유닉스 시간으로 엔트리 조회 범위를 지정할 수 있습니다.
    • 레디스만의 기능으로 Consumer Group 기능을 지원하여 그룹 내 클라이언트 협동을 할 수 있습니다.

레디스 스트림을 사용할 수 있는 쿼리 모드에는 다음 3가지 종류가 있습니다

  • 메시징 시스템
  • 시계열 데이터
  • Consumer Group

레디스 사용 가능한 명령어

자세한 내용은 레디스 공식 문서의 Stream 형 명령어 참조

profile
LEVEL UP

0개의 댓글